泊坞窗自定义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 web
和php
提供的主机名(您在docker-compose.yml
中提供给服务的名称将被创build为可供其他容器使用的主机名。
- 如何防止Dockerfile指令被caching?
- docker-swarm上无法curltraefik仪表板
- WordPress的 – curl错误7:无法连接到本地端口80:连接被拒绝
- 可以从curl访问docker服务,但不能从postman / chrome访问
- 有一个直接的方式来获得来自unix套接字的html响应(像curl一样)吗?
- 如何通过REST使用点删除工作区?
- Docker群集:REST API可以通过端口3001访问,但不能通过networking服务器访问
- Hyperledger面料。 无法使用curl下载Docker镜像:
- HEALTHCHECK启动容器过程导致无效环境USERNAME