2016-12-29 7 views
0

私は、Mac OSシエラ、すなわちwebmysqlmongo上で実行されている3個のドッカーコンテナを持っている、とApacheで、基本的にUbuntuのXenailベースでwebに両方mongomysqlを、リンクされていますPHPが追加されました。symfonyはMySQLのドッカーコンテナに接続することはできません

私は現在web容器の中に私の地元のsymfonyプロジェクトを取り付けていて、それが正常に動作しているようだが、私はどのような方法で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 

のSymfony 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'を設定しました。イメージがWebコンテナに直接リンクされている場合でもリモートアクセスを設定する必要はありますか? – 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 /"フォルダ内にあるものです。これらのスクリプトはエントリポイントで実行されます。

https://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.sh#L151

を参照してください、彼らはメインスクリプトを中断しますが、これらのスクリプトでexitXを使用しないようにしてくださいスクリプトが参照としてhttps://github.com/docker-library/mysql/blob/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7/docker-entrypoint.shを使用し、あなたのすべての警告を印刷していなかったことを確認するためにmysqlのためにあなたのドッキングウィンドウのログを確認してください。

最後に、ドッカー製作を使用してください。あなたはタイミング(MySQLが遅く始めとウェブ・コンテナは、フリークアウト)に問題がある場合は、ウェブで「mysqlのを待つ」エントリポイントを使用します。

#!/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 

設定db_host$user$pasword応じENVを使用して、または何あなたに合っている。

+0

かなりの苦しみの後@EugeneMayerの答えに2分以上を記載しているように、MySQLが開始するのに甘い時間を取っていたことが判明しました。これが問題の原因です。 'docker-compose up -d'を実行した後、' docker-compose logs'を実行して何が起きているのかを見て、MySQLが起動を完了できなかったことに気付きました。起動が完了するのを待って、ホスト名とそれに対応するパラメータを使用して接続できました。ありがとう! – Odyss3us

+0

それは非常に非常に遅いです。/var/lib/MySQL用のホストマウントでOSXを使用していますか? –

+0

うん、合意した。私はOSXを実行していますが、ホストマウントはありません。 – Odyss3us

関連する問題