我在做一个测试,安装了Docker版本20.10.8,在一台没有安装Docker的机器上构建3967b7d,然后在这台新机器上部署了一个Docker容器的.tar文件。
然后我运行Docker容器,但不包括"--网络";参数在";docker run";命令行,当dockerized应用程序启动时,它无法解析它使用的一些主机名,我看到";未知主机异常";dockerized应用程序日志中的异常。
因此,为了让dockerized应用程序运行,我做了同样的";docker run";命令,但这一次,我包含了一个"--网络主机";参数当该应用程序启动时,它能够DNS解析主机名,而我没有得到";未知主机异常";例外情况。
随后,我做了";docker stop"码头工人rm";然后";docker run";命令多次进行其他测试,但我想尝试调查";未知主机异常";问题,所以我最终做了";docker stop"docker rm";,然后";docker run";命令,但没有"--网络";参数,并且我期望看到";未知主机异常";但是;未知主机异常";异常不再出现,即使容器使用Docker BRIDGE网络!!!
我一直在努力理解/弄清楚";为什么"有一段时间,但后来我只是签入了/var/lib/contensions/<LONG_STRING_OF_NUMBERS-LETTERS>并注意到有一个";resolv.conf";在该目录中;resolv.conf";文件与物理机器的/etc/resolv.conf的内容相同!!
所以我的理论是:
a) 当我最初做";docker run";没有"--网络";参数;resolv.conf";容器内是空的(或默认情况下),然后
b) 当我做";docker run";用"--"网络主机";,Docker将物理/etc/resolv.conf复制到容器的";resolv.conf";,但是
c) 当我做";docker run";但没有任何"--网络";参数(即,具有桥接网络);resolv.conf";保留/保留/未清除。
有人能确认是否发生了上述行为吗?
此外,正如我前面提到的,我一直在做";码头停靠站";以及";码头工人rm";在我这么做之前";docker run";,但是是否存在我应该使用的一些其他命令(或参数)来防止容器";resolv.conf";从桥接模式切换到主机模式,然后再切换回桥接模式时的持久性?
我为这个冗长的问题道歉,但我正在尽可能清楚地解释我的问题。
提前感谢!!!
Jim
Docker完全管理容器中的/etc/resolv.conf
,以及网络环境的大部分其他细节。如果图像中有一个resolv.conf
文件,则该文件将被隐藏且未使用。如果您需要覆盖DNS解析程序,有一个docker run --dns
选项可以做到这一点。
您几乎应该总是使用与您拥有的docker network create
d网络名称匹配的--net
来调用docker run
。省略--net
选项将使用非常有限的第一代Docker网络设置;--net=host
完全禁用Docker网络。网络本身没有任何与DNS相关的设置。
# does not need any options but does need to be created
docker network create a-network
docker run --net=a-network --dns=8.8.8.8 ...