Docker组合v2容器找不到对方(虽然v1)

试图学习Docker,我无法让两个容器看到对方。 当使用docker-compose版本2格式的文件时,我收到错误,试图从前端到达数据库。 我尝试了我认为是一个万无一失的方法 – 直接从Docker网站使用WordPress示例 。 使用这个确切的例子,数据库不能被wordpress容器find。 这是它显示的错误:

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文件。 两者之间的唯一区别是删除版本号和“服务”分组。

版本1docker – 撰写文件,工作

 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 docker-compose不起作用

 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 

这一定是一个configuration问题。 我执行了你的确切的版本2文件(只改变了发布的端口)。 通过以下方式启动它:

  docker-compose up 

切换到另一个shell,并进入Web容器。

  docker exec -it web_1 /bin/bash root@d089d5b25d99:/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 root@c8b13ff81973:/# 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 

它可以pingnetworking容器就好了。