2016-05-21 23 views
2

私はこのドッカーファイルを持っており、期待どおりに動作しています。私はlocalhost上のmysqlに接続するPHPアプリケーションを持っています。ドッカーコンテナからmysqlデータベースに接続

# cat Dockerfile 
FROM tutum/lamp:latest 
RUN rm -fr /app 
ADD crm_220 /app/ 
ADD crmbox.sql/
ADD mysql-setup.sh /mysql-setup.sh 
EXPOSE 80 3306 
CMD ["/run.sh"] 

別のコンテナとしてデータベースを実行しようとすると、私のPHPアプリケーションは引き続きlocalhostを指しています。 "web"コンテナに接続すると、 "mysql1"コンテナに接続できません。

# cat docker-compose.yml 
web: 
    build: . 
    restart: always 
    volumes: 
    - .:/app/ 
    ports: 
    - "8000:8000" 
    - "80:80" 
    links: 
    - mysql1:mysql 

mysql1: 
    image: mysql:latest 
    volumes: 
    - "/var/lib/mysql:/var/lib/mysql" 
    ports: 
    - "3306:3306" 
    environment: 
    MYSQL_ROOT_PASSWORD: secretpass 

私のPHPアプリケーションは、別のコンテナからmysqlにどのように接続しますか?

これは、ここで尋ねた質問に似ている...私は、ホストマシンからMySQLへの接続したくない

Connect to mysql in a docker container from the host

は、私は別の容器から接続する必要があります。

+1

あなたのmysql接続設定はどのように見えますか?ホストが 'localhost'を指している場合、間違っているのは' mysql 'でなければなりません。 –

答えて

2

まず、ホストマシンから呼び出さない場合は、mysql 3306ポートを公開しないでください。 2番目のリンクでは廃止されました。代わりにネットワークを使用できます。私はv.1を作成するのは不確かですが、v.2では、共通のドッカー作成ファイルのすべてのコンテナは1つのネットワーク(more about networks)にあり、お互いの名前で解決できます。ドッキングウィンドウ・コンV.2ファイルの例:

version: '2' 
services: 
    web: 
    build: . 
    restart: always 
    volumes: 
     - .:/app/ 
    ports: 
     - "8000:8000" 
     - "80:80" 
    mysql1: 
    image: mysql:latest 
    volumes: 
     - "/var/lib/mysql:/var/lib/mysql" 
    environment: 
     MYSQL_ROOT_PASSWORD: secretpass 

このような構成とすることは、あなたは、Webコンテナの内部名mysql1でmysqlのコンテナを解決することができます。

+0

'web'コンテナに何かを設定する方法はありますか?PHPが' localhost'に接続しようとすると自動的に 'mysql1'コンテナにリダイレクトされますか? – Link14

+2

@ Link14 'localhost'の' web'の中のすべての呼び出しは 'web'コンテナのアドレスだけになります。 'mysql1'コンテナを呼び出す場合は、' mysql1'ホストを呼び出す必要があります – Cortwave

関連する問題