2017-02-16 40 views
1

試圖學習Docker,我無法讓兩個容器看到對方。當使用docker-compose版本2格式的文件時,我收到從前端到達數據庫的錯誤。我嘗試了我認爲是一個萬無一失的方法 - using the WordPress example straight from the Docker website。使用這個確切的例子,數據庫不能被wordpress容器找到。這是它顯示的錯誤:Docker組合v2容器沒有找到彼此(雖然v1)

Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22 
Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in - on line 22 
MySQL Connection Error: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known 

我把它歸結爲一個簡單的例子來顯示工作版本1文件和非工作版本2文件。兩者之間的唯一區別是刪除版本號和「服務」分組。

版本1泊塢窗,撰寫文件,它的工作

web: 
    image: wordpress 
    links: 
    - mysql 
    environment: 
    - WORDPRESS_DB_PASSWORD=password 
    ports: 
    - "8080:80" 
mysql: 
    image: mysql:5.7 
    environment: 
    - MYSQL_ROOT_PASSWORD=password 
    - MYSQL_DATABASE=wordpress 

2版搬運工,撰寫不起作用

version: '2' 
services: 
    web: 
    image: wordpress 
    links: 
     - mysql 
    environment: 
     - WORDPRESS_DB_PASSWORD=password 
    ports: 
     - "8080:80" 
    mysql: 
    image: mysql:5.7 
    environment: 
     - MYSQL_ROOT_PASSWORD=password 
     - MYSQL_DATABASE=wordpress 

我實際上並不想使用這些設置運行WordPress,只是試圖找出爲什麼一個docker-compose版本2文件不起作用,當完全相同的文件,格式化爲版本1文件,確實工作。我已經嘗試了許多其他連接到數據庫的示例應用程序,我可以不讓它們工作。

環境我使用:

$ uname -a 
Linux vir-docker 4.4.0-62-generiC#83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 
$ docker -v 
Docker version 1.13.1, build 092cba3 
$ docker-compose -v 
docker-compose version 1.11.1, build 7c5d5e4 
+0

在版本2中可能改進了安全性和/或網絡。您還需要將MySQL主機和端口設置爲服務「mysql」的名稱。 – rocksteady

+0

[docker website](https://docs.docker.com/compose/wordpress/)上的示例具有MySQL主機和端口集,甚至無法正常工作。 – justinvoelker

+0

版本:'3'適用於我...但不是2 – user672009

回答

1

這必須是一個配置問題。我執行了您的確切版本2文件(只更改了發佈的端口)。通過以下方式啓動它:

docker-compose up 

切換到另一個shell,並進入web容器。

docker exec -it web_1 /bin/bash 

[email protected]:/var/www/html# ping mysql 
PING mysql (172.18.0.2): 56 data bytes 
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.080 ms 
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.082 ms 

Web可以ping mysql就好了。現在我們來試試mysql容器:

docker exec -it mysql_1 /bin/bash 

[email protected]:/# ping web 
PING web (172.18.0.3): 56 data bytes 
64 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.081 ms 
64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.083 ms 

它可以ping web容器就好了。

+0

您是否碰巧擁有相同版本的碼頭和碼頭構成?我正在使用這個測試的虛擬機是爲了與Docker一起玩的唯一目的而開發的,並且沒有安裝任何東西。不知道還有什麼可以防止這個工作。感謝您確認至少它不是碼頭工人/撰寫/文件/格式問題。 – justinvoelker

+0

我比你大一點。 Docker版本1.12.6,build 78d18021ec,docker-compose版本1.6.2,build 4d72027 – user2105103

+0

好吧,一個更老,一個更新。 – user2105103