尝试学习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
最佳答案
这必须是配置问题。我执行了确切的版本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
它可以对Web容器执行ping操作。
关于docker - Docker组成v2容器彼此找不到(尽管v1可以找到),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42282890/