2017-08-07 137 views
2

我試圖讓一個web服務器容器連接一個mysql服務器容器,但當我嘗試在mysql服務器上連接時,我收到了未知的主機,如phpmyadmin。如何將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" 

難道我設置泊塢窗,撰寫文件是否正確?

編輯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

的問題是,您使用的是兩種不同的撰寫文件。如果在同一網絡中沒有兩個容器,則external_links不再起作用。請參閱下面的文檔

如果您使用的是第2版或更高版本的文件格式,外部創建的容器必須至少連接到與鏈接到它們的服務相同的網絡之一。從版本2開始,鏈接是遺留選項。我們建議使用網絡。

使用(版本3)Compose文件在羣集模式下部署堆棧時忽略此選項。

使用主機IP

由於您的MySQL是運行在主機上映射3306也。在您的撰寫文件中,您可以添加

extra_hosts: 
    - "mysql:<MACHINEIP>" 

MachineIP是您的主機的IP。同樣不推薦的方式做到這一點

使用外部網絡

docker-compose允許您定義網絡。所以,你可以定義在你的MySQL撰寫文件,然後將其映射在你的其他搬運工,組成一個外部網絡,並使用其名稱mysqldb

請前往以下網址可以訪問相同的https://docs.docker.com/compose/networking/#using-a-pre-existing-network

+0

謝謝你,我沒有意識到這個名字需要相同,因爲我使用了container_name選項。我會嘗試這些改變; –

+1

這是我的錯,我沒有看到你使用'container_name'。給我幾分鐘 –

+1

更正了我的答案 –

相關問題