容器里的 /etc/resolv.conf 从哪来?改了它能保存吗?--network host、--network none、--dns 各会生成什么?这篇读 mountinfo 和 docker inspect,逐项实测。
mountinfo 里的 resolv.conf:/docker/containers/<容器ID>/resolv.conf /etc/resolv.conf /dev/vda1 rw,discard docker inspect 的 ResolvConfPath:/var/lib/docker/containers/<容器ID>/resolv.conf 虚拟机里那个文件的内容:nameserver <本机局域网IP> 虚拟机自己的 /etc/resolv.conf:nameserver <本机局域网IP> 容器里的 /etc/resolv.conf:nameserver <本机局域网IP>
容器的 /etc/resolv.conf 是 bind mount 的单个文件,docker inspect 的 ResolvConfPath 指出了它在虚拟机里的位置。默认复制虚拟机自己的 resolv.conf。
追加 nameserver 9.9.9.9 后:nameserver <本机局域网IP> ; nameserver 9.9.9.9 虚拟机里对应文件也变了吗?是 docker restart 之后:nameserver <本机局域网IP> docker stop 再 start 之后:nameserver <本机局域网IP>
容器里改它是可写的,改动同步到虚拟机里的那个文件,但容器 restart(或 stop 后 start)时 docker 会重新生成,改动丢失。所以别在容器里手改,用 --dns 等参数。至于容器运行期间虚拟机自己的 resolv.conf 变了会不会同步给容器,我没有测。
--network host:nameserver <本机局域网IP> --network none:nameserver <本机局域网IP> --dns 9.9.9.9 --dns-search corp.test --dns-opt timeout:1:nameserver 9.9.9.9 ; search corp.test ; options timeout:1 默认 bridge + --dns 9.9.9.9 --dns 1.1.1.1:nameserver 9.9.9.9 ; nameserver 1.1.1.1
--dns、--dns-search、--dns-opt 逐项写入;多个 --dns 就是多行 nameserver。自定义网络里的 127.0.0.11 见 c48。
daemon.json 里有 dns 相关配置吗?没有 dns 配置
daemon.json 里没有 dns 字段(我是读虚拟机里的 /run/config/docker/daemon.json 确认的),所以默认来源就是虚拟机自己。在 Docker Desktop 里这个配置由 Docker Desktop 管理,我不修改。