2017-02-16 54 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