我关注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
我在Web容器中设置了2个虚拟主机
app.lan
api.lan
在我的php
应用程序中,我卷曲到api.lan
。但它会抛出Could not resolve host: api.lan
在我的泊坞主机中,我已将以下内容添加到/etc/hosts
文件
127.0.0.1 app.lan
127.0.0.1 api.lan
我可以毫无问题地从docker主机到api.lan
卷曲。但似乎web
容器无法从docker主机解析名称。
如果我找到web
容器的ip并将其放入php容器的hosts文件中,如下所示。
172.18.0.5 api.lan
但是如何在docker compose上自动执行此操作。或者其他任何最佳做法?
此外,如果我对任何一个容器/etc/resolve.conf
进行捕捉,我都可以找到以下内容。
search local
nameserver 127.0.0.11
options ndots:0
这是什么127.0.0.11?它是主机吗?
我正在使用“Docker for mac”v 1.12.1
答案 0 :(得分:1)
127.0.0.11是docker的内部dns,它允许容器通过名称直接相互通信(' web'以及' php'在你的情况下)。
您可以使用docker-compose.yml中的extra hosts向docker添加额外的条目。
答案 1 :(得分:1)
正如@Chris所指出的,我需要使用docker的extra_hosts
,我还需要创建一个网络并为每个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
答案 2 :(得分:0)
在我的php应用程序中,我卷曲到
api.lan
不要那样做。使用docker web
和php
提供的主机名(您为docker-compose.yml
中的服务提供的名称将创建为可供其他容器使用的主机名。