尝试学习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
答案 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网络容器。