2017-08-07 8 views
2

私は、Webサーバコンテナをmysqlサーバコンテナに接続しようとしていますが、phpmyadminのようにmysqlサーバに接続しようとすると、不明なホストになります。ここでdockerコンテナを外部のmysqlコンテナにリンクする方法は?

私のMySQLのドッキングウィンドウ-compose.yml

version: '3' 
services: 
    mysqldb: 
     image: mysql 
     container_name: mysql 
     restart: always 
     env_file: 
      - ".env" 
     environment: 
      - MYSQL_DATABASE=${MYSQL_DATABASE} 
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} 
      - MYSQL_USER=${MYSQL_USER} 
      - MYSQL_PASSWORD=${MYSQL_PASSWORD} 
     ports: 
      - "3306:3306" 
     expose: 
      - "3306" 
     volumes: 
      - "./data/mysql:/var/lib/mysql" 

そして、ここに私のWebサーバーコンテナ

version: '3' 
services: 
    web: 
     image: nginx:latest 
     container_name: web 
     ports: 
      - "80:80" 
      - "443:443" 
     restart: always 
     volumes: 
      - "./etc/nginx/nginx.conf:/etc/nginx/nginx.conf" 
      - "./etc/nginx/sites-enabled:/etc/nginx/sites-enabled" 
      - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf" 
      - "./etc/ssl:/etc/ssl" 
      - "./web:/var/www/html" 
      - "./data/domains:/domains" 
     depends_on: 
      - php 
     external_links: 
      - "mysql:mysql" 
    php: 
     image: nanoninja/php-fpm 
     restart: always 
     volumes: 
      - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini" 
      - "./web:/var/www/html" 
      - "./data/domains:/domains" 
    myadmin: 
     image: phpmyadmin/phpmyadmin 
     container_name: phpmyadmin 
     ports: 
      - "8080:80" 
     environment: 
      - PMA_ARBITRARY=1 
      - PMA_HOST=mysql 
     restart: always 
     external_links: 
      - "mysql:mysql" 

が正しくドッキングウィンドウ-コンファイルIセットアップしましたか?

編集1:

[email protected]:~/docker# docker ps | grep mysql 
0d49167a6aae  mysql           "docker-entrypoint..." About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp      mysql 

答えて

2

問題は、次の2つの異なるコンのファイルを使用していることです。同じネットワーク上に両方のコンテナがない場合、external_linksはもう機能しません。以下のドキュメントを参照してください

バージョン2以上のファイル形式を使用している場合、外部で作成されたコンテナは、それらにリンクしているサービスと同じネットワークの少なくとも1つに接続する必要があります。バージョン2以降、リンクは従来のオプションです。代わりにネットワークを使用することをお勧めします。

(バージョン3)のComposeファイルを使用してスワムモードでスタックをデプロイする場合、このオプションは無視されます。あなたのMySQLがホスト上で実行されているので、ホストIP

使用

も3306をマッピングされました。あなたの作成ファイルに追加することができます

extra_hosts: 
    - "mysql:<MACHINEIP>" 

MachineIPはあなたのホストのIPです。ここでも推奨される方法は

docker-composeあなたがネットワークを定義することを可能にする外部ネットワークを使用すること

を行うにはありません。だから、私は、https://docs.docker.com/compose/networking/#using-a-pre-existing-network

+0

ありがとう次のURLを参照してくださいMySQLのコンポーズファイルでそれを定義してから、他のドッキングウィンドウ・コンで外部ネットワークとしてそれをマッピングし、mysqldb

その名前を使用して同じにアクセスすることができます私はcontainer_nameオプションを使用したので、この名前が同じである必要があることを認識していませんでした。私はそれらの変化を試みます。 –

+1

それは私の悪かったです、私はあなたが 'container_name'を使用するのを見ていませんでした。私に数分を与えてください –

+1

私の答えを修正しました –

関連する問題