web-dev-qa-db-ja.com

systemdを使用するOSでDockerデーモンのDNSを設定する

DockerのデフォルトDNS(8.8.8.8など)は私が働いている場所でブロックされているので、デフォルトを変更したいと思います。私はこれを使用してこれを行うことができました

$ docker daemon --dns <mydnsaddress>

ただし、Dockerの公式ドキュメントではこの方法が推奨されているため、代わりにsystemdドロップインを使用してこれを実行したいと思います。 /etc/systemd/system/docker.service.d/dns.confファイルを作成し、次のようなものを使用しました。

[Service]
DNS=<mydnsaddress>

しかし、変数名が何であるかはわかりません。これを設定するにはどうすればよいですか?さらに重要なことに、Dockerのsystemdドロップインで使用できるすべての構成変数を文書化したページはありますか?

(ところで、これはUbuntu15.10のDocker1.9ですが、バグは疑われません)

15
labyrinth

.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)にコピーする必要があります。 daemonExecStart部分の後に--dns $ipを追加します。例えば。:

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

ここで、192.168.1.1はDNSサーバーのIPです。

ここで、systemctlを介してdockerを再起動すると、dockerは独自のDNSで再起動するはずです。 (systemctl status docker.service | grep dnsで確認できます)。

Systemctlは、最初にクリアされた場合にのみExecStartを無効にするため、空のExecStart=が必要であることに注意してください。

また、systemctl daemon-reloadでファイルを編集した後は、/etc/systemd/system/が必要であることに注意してください。

最後に、一部のシステムでは、docker.service/usr/lib/systemd/system/ではなく、/lib/systemd/system/にあります。

37
steviethecat

はい、@ 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
1