泊坞窗自定义DNS在容器之间解决

我有以下docker-compose.yml

 php: build: ./phpfpm volumes: - ~/works/codes:/code web: image: nginx:latest ports: - "80:80" volumes: - ~/works/codes:/code - ./nginx/etc/conf.d/virtual.conf:/etc/nginx/conf.d/virtual.conf - ./nginx/var/log/nginx:/var/log/nginx links: - php 

我有2个虚拟主机设置在Web容器内

 app.lan api.lan 

在我的php应用程序,我curl到api.lan 。 但它引发Could not resolve host: api.lan

在我的docker主机中,我添加了以下到/etc/hosts文件

 127.0.0.1 app.lan 127.0.0.1 api.lan 

我可以从docker主机机器curl到api.lan没有问题。 但似乎web容器不解决docker主机的名称。

如果我findweb容器的IP,并将其放入PHP容器的主机文件,如下所示。

 172.18.0.5 api.lan 

但是,如何在docker上自动执行这个操作。 还是有其他的最佳做法呢?

另外,如果我cat /etc/resolve.conf的任何一个容器,我可以find以下。

 search local nameserver 127.0.0.11 options ndots:0 

这是什么127.0.0.11? 它是主机吗?

我在“Docker for Mac” v 1.12.1

127.0.0.11是docker的内部dns,允许容器直接通过名字相互通信(在你的情况下是'web'和'php')。

您可以使用docker-compose.yml中的额外主机向docker添加额外的条目。

作为@Chris指出我需要使用docker的extra_hosts ,也需要创build一个networking,并分配给每个docker集装箱的IP。

以下是我的完整docker-compose.yml

 version: "2" networks: lan_0: driver: bridge ipam: driver: default config: - subnet: 172.19.0.0/24 gateway: 172.19.0.21 services: php: build: ./phpfpm volumes: - ~/works/codes:/code extra_hosts: - "api.lan:172.19.0.21" networks: lan_0: ipv4_address: 172.19.0.22 web: image: nginx:latest ports: - "80:80" volumes: - ~/works/codes:/code - ./nginx/etc/conf.d/virtual.conf:/etc/nginx/conf.d/virtual.conf - ./nginx/var/log/nginx:/var/log/nginx links: - php networks: lan_0: ipv4_address: 172.19.0.21 

在我的PHP应用程序,我curl到api.lan

不要这样做。 使用docker webphp提供的主机名(您在docker-compose.yml中提供给服务的名称将被创build为可供其他容器使用的主机名。