2016-12-29 2 views
0

나는 맥 OS 시에라, 즉 web, mysqlmongo에서 실행 세 도커 용기를 가지고 있고, 아파치, 기본적으로 우분투 Xenail 기지 web에 모두 mongomysql을 연결 한 그리고 PHP가 추가되었습니다.심포니는 MySQL의 부두 노동자 컨테이너에 연결할 수

저는 현재 web 용기에 내 로컬 심포니 프로젝트를 장착하고, 그것은 잘 동작하는 것,하지만 난 어떤 방법으로 DB와 상호 작용 할 때, 내가 얻을 : 예외가 발생

드라이버 : SQLSTATE는 [HY000] [2002] 연결 내가 매개 변수 값의 거의 모든 조합을 시도했습니다

을 거부하지만, 같은 결과를 점점 계속.

컨테이너를 연결하는 방식과 관련이 있다고 생각합니까?

나는 Docker를 배우는 중이므로 제 제한된 지식을 용서하십시오.

감사합니다.

웹 dockerfile :

FROM ubuntu:xenial 
MAINTAINER Some Guy <[email protected]> 

RUN apt-get update && apt-get install -y \ 
apache2 \ 
vim \ 
php \ 
php-common \ 
php-cli \ 
php-curl \ 
php-mysql \ 
php-mongodb \ 
libapache2-mod-php \ 
php-gd 

RUN mkdir -p /var/www/symfony.local/public_html 
RUN chown -R $USER:$USER /var/www/symfony.local/public_html 

RUN chmod -R 755 /var/www 

COPY config/php/php.ini /usr/local/etc/php/ 
COPY config/apache/sites-available/*.conf /etc/apache2/sites-available/ 

RUN a2enmod rewrite 

RUN a2dissite 000-default.conf 
RUN a2ensite symfony.local.conf 

EXPOSE 80 

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 

의 MySQL dockerfile :

FROM mysql:5.7 
MAINTAINER Some Guy <[email protected]> 

# Set the root users password 
ENV MYSQL_ROOT_PASSWORD password 

# Copy over the DB dump to be run upon creation 
COPY sql/ /docker-entrypoint-initdb.d 

# Copy over the custom mysql config file 
COPY config/ /etc/mysql/conf.d 

EXPOSE 3306 

실행 명령 :

docker run --name mongo -d mongo #Im making use of the official Mongo image 
docker run --name mysql -v /usr/local/var/mysql:/var/lib/mysql -d someguy/local:mysql 
docker run --name web -d -p 80:80 --link mysql:mysql --link mongo:mongo -v ~/Sites/symfony.local/:/var/www/symfony.local/public_html/ someguy/local:web 

심포니의 parameters.yml 파일 :

parameters: 
    database_host: mysql 
    database_port: 3306 
    database_name: gorilla 
    database_user: root 
    database_password: password 

UPDATE :

그래서 나는 docker-compose을 사용하는 동안 이동했지만 여전히 같은 오류가 발생하고있다.

이 고정 표시기-compose.yml 파일

version: "2" 
services: 
    web: 
    build: ./web 
    ports: 
     - "80:80" 
    volumes: 
     - ~/Sites/symfony.local/:/var/www/symfony.local/public_html/ 
    depends_on: 
     - db 
     - mongo 
    mongo: 
    image: mongo:latest 
    mysql: 
    image: mysql:latest 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: password 
+0

이것은 Docker 자체와는 거의 관계가 없습니다. MySQL에서 원격 액세스를 어떻게 구성 했습니까? – mustaccio

+0

잘 모르겠다. 공식 MySQL 이미지를 확장하고'sql_mode'를 설정했다. 이미지가 웹 컨테이너에 직접 링크되어 있어도 원격 액세스를 구성해야합니까? – Odyss3us

+0

이 Docker가 "연결 중"이라고 혼동하지 마세요. 각 컨테이너는 Docker 네트워크의 호스트로 간주됩니다. Docker 네트워킹 (및 MySQL 원격 액세스 구성)을 읽으십시오. – mustaccio

답변

1

예외가 드라이버에서 발생했습니다 SQLSTATE는 [HY000] [2002] 연결이

수단을 거절, 그것을 함께 할 수 없다 귀하의 네트워크 자체 - 링크가 잘됩니다.

부족한 부분은 사용자가 생성 된 방법입니다. 사용자가 https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh#L122으로 작성된 경우 호스트 자체가 실제로 제한되지 않습니다.

"sql /"폴더 안에 무엇이 있는지 질문합니다.이 스크립트는 진입 점에서 실행됩니다.

것은 그 스크립트에서 exitX를 사용하지 않을해야합니다, 그들은 주요 스크립트를 중단됩니다 https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh#L151

, 당신에게 경고를 인쇄 참조로 https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh을 사용하지 않은 스크립트를 보장하기 위해 MySQL을 위해 고정 표시기 로그를 확인하십시오.

그리고 마지막으로 중요한 것은 도커 작성을 사용하십시오. 당신은 (MySQL이 둔화하고 웹 컨테이너를 괴물 시작) 타이밍에 문제가있을 경우를 사용하는 웹의 엔트리 포인트 "mysql을 기다립니다", $pasword 그에 따라 ENV 또는 무엇이든을 사용

#!/bin/bash 
# this script does only exist to wait for the database before we fire up tomcat/standalone 

RET=1 
echo "Waiting for database" 
while [[ RET -ne 0 ]]; do 
    sleep 1; 
    if [ -z "${db_password}" ]; then 
     mysql -h $db_host -u $db_user -e "select 1" > /dev/null 2>&1; RET=$? 
    else 
     mysql -h $db_host -u $db_user -p$db_password -e "select 1" > /dev/null 2>&1; RET=$? 
    fi 
done 

$user, db_host 설정 자신에게 맞는.

+0

꽤 많은 고통을 겪은 후 @EugeneMayer의 답변에 2 분 이상 진술 한 바와 같이 MySQL이 문제를 일으키는 원인이 된 것으로 생각됩니다. 'docker-compose up -d'를 실행 한 다음,'docker-compose logs'를 실행하여 무슨 일이 일어나고 있는지 살펴본 후, MySQL이 시작을 끝내지 못했음을 알았습니다. 부팅이 완료 될 때까지 기다렸다가 호스트 이름과 해당 매개 변수를 사용하여 연결할 수있었습니다. 감사! – Odyss3us

+0

매우 느립니다./var/lib/MySQL을위한 호스트 마운트로 OSX를 사용하고 있습니까? –

+0

그래, 동의했다. 나는 OSX를 실행 중이다. 호스트는 없다. – Odyss3us

관련 문제