我怎样才能触发我的容器中重装的resolv.conf?

在启动时运行容器时,我注意到在systemd-resolved使用DHCP从缺省更新之前,有一些使用resolv.conf。 这意味着启动后过早启动的容器无法解决任何问题,需要重新启动才能使用正确的DNS设置。 对于rkt和Docker来说,这是因为不同的原因而发生的; Docker用于更新容器内resolv.conf的方法与overlay文件系统驱动程序不兼容,而且由于systemd-resolved并没有就地更新文件(而是创build了临时文件并重命名),因此rkt的绑定挂载不会更新容器所看到的内容。

目前我正在使用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再次更改它将无济于事。 所以我想知道是否有一个更优雅的解决scheme,我的问题。 理想情况下,我希望能够在每次更改rkt和Docker容器时触发resolv.conf更新。

在用户定义的networking上运行容器,以便他们将使用embedded式DNS服务器将查询转发给系统DNS。

默认的docker0网桥有一些特殊的规则,遗留在原有的支持。 使用挂载的/etc/resolv.conf是其中一个遗留问题。

如果rkt不支持相同types的DNS,那么一般的解决scheme可能是设置一个像Unbound这样的DNS服务器作为本地的转发parsing器 。 然后容器有一个静态DNS服务器来引用。