过去几周,我一直在尝试修复Docker堆栈中的错误,但无济于事。
这是有问题的撰写文件(深入到相关内容):
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
。
这将导致以下错误
卷曲:(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
)。
我的防火墙没有阻止蜂。
答案 0 :(得分:0)
尝试通过添加
将DNS转发器添加到“ /etc/resolv.conf” server=8.8.8.8
server=1.1.1.1
查看添加后的curl是否可以解析google
答案 1 :(得分:0)
这是个“ doh”时刻。
显然(尽管我在文档中找不到此容器),但容器仅连接到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