Docker编写的v2容器没有找到对方(虽然v1确实如此)

时间:2017-02-16 19:24:39

标签: docker docker-compose

尝试学习Docker,我无法让两个容器看到对方。使用docker-compose版本2格式的文件时,我会收到尝试从前端到达数据库的错误。我尝试了我认为是万无一失的方法 - using the WordPress example straight from the Docker website。使用该确切示例,wordpress容器无法找到数据库。这是它显示的错误:

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 docker-compose文件,可以工作

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,只是试图弄清楚为什么当格式化为版本1文件的完全相同的文件工作时,docker-compose版本2文件不起作用。我已经尝试了许多连接到数据库的其他示例应用程序,但我无法使用它们。

我正在使用的环境:

$ 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

1 个答案:

答案 0 :(得分:1)

这必须是配置问题。我执行了您的确切版本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

它可以正常ping网络容器。