gpt4 book ai didi

docker - 如何在我的容器中触发 resolv.conf 的重新加载?

转载 作者:行者123 更新时间:2023-12-02 20:09:46 30 4
gpt4 key购买 nike

在启动时运行容器时,我注意到一些在 systemd-resolved 使用 DHCP 从默认值更新之前使用 resolv.conf。这意味着启动后过早启动的容器无法解决任何问题,需要重新启动才能使用正确的 DNS 设置。对于 rkt 和 Docker 来说,发生这种情况的原因各不相同; Docker 更新容器内 resolv.conf 的方法是 not compatible with the overlay filesystem driver并且由于 systemd-resolved 不会就地更新文件(而是创建一个临时文件并重命名),rkt 的绑定(bind)安装不会更新容器看到的内容。

目前我正在使用一个 hacky systemd.unit 来延迟 docker.service 和我的 rkt pod 所依赖的 network-online.target。

[Unit]
Description=Wait for DNS

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/sh -c 'while ! getent ahosts google.com >dev/null; do sleep 1; done'

[Install]
WantedBy=network-online.target

但这大大延迟了我的启动时间
# systemd-analyze blame
18.068s wait-for-dns.service
...

如果 resolv.conf 再次更改,它将无济于事。所以我想知道是否有更优雅的解决方案来解决我的问题。理想情况下,我希望能够在每次更改时触发 rkt 和 Docker 容器中的 resolv.conf 更新。

最佳答案

user defined network 上运行容器所以他们将使用 embedded DNS server这会将查找转发到系统 DNS。

默认 docker0 bridge 有一些特殊的规则是为了遗留支持而保留的。使用已安装的 /etc/resolv.conf是那些遗留的东西之一。

如果 rkt 不支持相同类型的 DNS,那么一般的解决方案可能是设置一个 DNS 服务器,如 Unbound。成为 local forwarding resolver .然后容器有一个静态 DNS 服务器可以引用。

关于docker - 如何在我的容器中触发 resolv.conf 的重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297238/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com