如何更改“默认”的docker-machine的DNS设置

29

我知道如何创建具有 DNS 设置的新 Docker-machine

docker-machine create -d virtualbox --engine-opt dns=8.8.8.8 my_machine

但是已经存在一个“默认”的虚拟机,所以是否有一种方法可以更改它的DNS?

我在网上阅读了使用boot2docker完成此操作的方法,但该工具已被弃用,docker-machine已取代它。不幸的是,它是如此新的工具,我在网上没有找到太多相关信息。


我的解决方法是删除原始的“默认”主机并创建一个新的(同名)主机,其中包含我需要的DNS设置。 - kane
2个回答

43

前往 ~/.docker/machine/machines/default/config.json 并将您自己的DNS服务器添加到HostOptions/EngineOptions/Dns,然后重新启动docker machine。

{  
   "HostOptions": {
        "Driver": "",
        "Memory": 0,
        "Disk": 0,
        "EngineOptions": {
            "ArbitraryFlags": [],
            "Dns": ["192.168.99.1","8.8.8.8","8.8.4.4"], <-- set it here
            "GraphDir": ""
        }
}

编辑:

在新版的docker-machine中,config.json中的DNS设置似乎被忽略了。唯一有效的方法是添加以下行(将其编辑以符合您的需求):

"${DOCKER_MACHINE}" ssh "${VM}" "sudo sed -i.bkp '/--label provider=virtualbox/a --dns 8.8.8.8\\\n--dns 8.8.4.4' /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"

之后

yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}"

在脚本start.sh中, 每次启动Docker Quickstart终端时都会运行该脚本。

然后关闭虚拟机(如果正在运行), 并打开一个新的Docker Quickstart终端实例。


1
在我的 config.json 文件中,“Dns” 值为 null。将其替换为仅包含 8.8.x.x 服务器的列表对我有用。我猜测只有在本地设置了自定义 DNS 条目时才需要 192.168.99.1。 - amacleod
3
FYI -- 您还可以使用 docker-machine provision name 命令应用任何配置更改,无需重启计算机!(注:name是指Docker Machine的名称) - nathanleclaire
1
DNS设置不会修改虚拟机中的/etc/resolv.conf文件。这与VirtualBox网络设置有关。它会修改Docker守护进程本身使用的DNS服务器。 - nathanleclaire
2
将此配置设置为["8.8.8.8", "8.8.4.4"],重新启动Docker机器,重启Docker服务,然后再次重新启动Docker机器,接着重新进行配置,最后再次重启。该机器不可思议地尝试使用10.0.2.3作为DNS服务器。 - Caleb Fenton
1
这对我没有解决问题。我把DNS服务器8.8.8.8放在那里,但仍然出现相同的错误。 - harrisonfooord
显示剩余7条评论

5
在Windows 10上,Docker的GUI提供了一些便利功能。只需右键单击托盘栏中的Docker图标,然后选择“设置”选项即可。

Docker's options

然后,在Docker窗口中,选择“网络”部分,并将DNS选项从“自动”更改为“固定”,然后点击“应用”。之后,Docker将重新启动。我使用了谷歌的DNS(8.8.8.8),这对我很有效。

docker's network section with dns config

希望能有所帮助。

当我将此选项更改为fixed并设置IP地址,然后在容器中检查resolv.conf时...它保持不变。我不认为这个有效。 - Brandon.Blanchard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接