docker - Docker组成v2容器彼此找不到(尽管v1可以找到)

标签 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

最佳答案

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

相关文章:

docker - 如何避免使用太多容器来破坏 Docker?

docker - Dockerfile ARG变量

ruby-on-rails-4 - 权限被拒绝 @ rb_sysopen - 日志/application.log (Errno::EACCES)

docker - 如何使用多种服务备份Docker?

Python 库在安装到 img build 后在 docker 容器中丢失

node.js - docker:安装 node.js 应用程序有问题,因为 docker 以 root 身份运行

wordpress - 如何在docker上更新wordpress

azure - 从 Ubuntu Server (18.04.6 LTS) Azure Vm 中的 docker 提取镜像时出错

docker - PHP Composer & 其他 Docker 服务启动顺序问题

apache - 无法使用 docker 自动启动 apache