在过去的几周里,我一直在尝试修复我的Docker堆栈中的一个bug,但是没有结果。
这是正在讨论的撰写文件(简化为相关内容):
version: '3.7'
services:
php:
...
dns:
- 1.1.1.1
- 1.0.0.1
networks:
default:
internal: true
driver: overlay
它可以很好地部署,直到我必须做任何需要“外部”DNS请求的事情。
例如:在我的容器中,我手动运行curl https://www.google.com
。
这将导致以下错误
curl:(6)无法解析主机: google.com
这是容器中我的/etc/resolv.conf
的内容:
search finlaydag33k.nl
nameserver 127.0.0.11
options ndots:0
运行docker inspect -f '{{.HostConfig.DNS}}' container-id
将产生以下输出:
1.1.1.1 1.0.0.1
我的问题是,我做错了什么,我如何解决这个问题?它可以通过dns名称到达同一堆栈中的服务,只是不需要和外部DNS (如1.1.1.1
或8.8.8.8
)的域。没有什么东西被我的防火墙挡住了。
发布于 2019-02-25 04:47:08
这是一个“多头”的时刻。
显然(虽然我在文档中找不到这一点),容器只连接到default
网络,这是一个overlay
网络。
这意味着必须将bridge
网络显式地添加到这个容器中(并且显式地将其连接到default
网络,以便与堆栈中的其他容器通信)。
这是没有记录的,所以我认为它已经能够到达外面。
在手动将default
和bridge
网络添加到容器后,一切都按预期工作。
version: '3.7'
services:
php:
...
networks:
- default
- bridge
dns:
- 1.1.1.1
- 1.0.0.1
networks:
default:
internal: true
driver: overlay
bridge:
external: true
发布于 2019-02-25 04:47:04
尝试将DNS转发器添加到‘/etc/surv.conf’通过添加
server=8.8.8.8
server=1.1.1.1
看看curl现在是否解决了google,在您添加了以下内容之后
https://stackoverflow.com/questions/54850834
复制