使用systemd在OS上为Docker守护程序设置DNS

问题描述 投票:15回答:2

我工作的地方阻止了Docker的默认DNS(例如8.8.8.8),所以我想更改默认值。我已经能够这样做了

$ docker daemon --dns <mydnsaddress>

但我想使用systemd drop-in来实现这一点,因为官方Docker文档推荐这种方式。我制作了一个/etc/systemd/system/docker.service.d/dns.conf文件,并使用了这样的东西:

[Service]
DNS=<mydnsaddress>

但我只是不知道变量名应该是什么。我该如何设置?更重要的是,是否有一个页面记录了可以在Docker的systemd drop-ins中使用的所有配置变量?

(顺便说一句,这是Ubuntu 15.10上的Docker 1.9,虽然我不怀疑任何错误)

dns docker systemd
2个回答
37
投票

.conf中的所有/etc/systemd/system/docker.service.d文件都否决了/usr/lib/systemd/system/docker.service文件中的设置,这几乎就是您尝试过的。

你需要将DNS=.. 文件中的ExecStart=部分复制到/usr/lib/systemd/system/docker.service(或dns.conf),而不是放入mydocker.conf线。在--dns $ipdaemon部分后添加ExecStart。例如。:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --dns 192.168.1.1 -H fd://

其中192.168.1.1是dns服务器的ip。

现在通过systemctl重新启动docker,现在应该使用自己的dns重新启动docker。 (可通过systemctl status docker.service | grep dns查询)。

请注意,空ExecStart=是必需的,因为如果首先清除ExecStart,则systemctl将仅否决它。

另请注意,在systemctl daemon-reload中编辑文件后需要使用/etc/systemd/system/

最后一点是,在某些系统上,docker.service不是位于/usr/lib/systemd/system/,而是位于/lib/systemd/system/


1
投票

是的,我同意@steviethecat给出的先前答案,但是当docker重新启动时,这会更改覆盖为默认值,所以我按照以下步骤操作。使用Docker版本18.09.2,

我跟着链接https://success.docker.com/article/using-systemd-to-control-the-docker-daemon

sudo systemctl edit docker //this opens new file use as overwrite file.

添加以下行。在设置此值之前,请确保您具有ExecStart =。上面给出的链接有详细信息

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --dns 192.168.1.1 -H fd://

一旦上面的行添加到文件中,执行下面的行。

sudo systemctl daemon-reload
systemctl restart docker
systemctl status docker
© www.soinside.com 2019 - 2024. All rights reserved.