systemd - Docker Daemon akzeptiert DOCKER_OPTS nicht
Beim Einrichten einer sicheren TLS-Verbindung zu meinem Docker-Daemon ist mir aufgefallen, dass der docker.service DOCKER_OPTS nicht mehr berücksichtigt.
Diese hatte ich als systemd Drop-In Unit in der Datei /etc/systemd/system/docker.service.d/custom.conf geschrieben:
[Service]
Environment=DOCKER_OPTS=/usr/bin/dockerd -H=0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/server-cert.pem --tlskey=/etc/docker/ssl/server-key.pem
Leider werden diese unter systemd gar nicht übergeben, wenn dockerd gestartet wird:
ExecStart=/usr/bin/dockerd -H fd://
DOCKER_OPTS
scheint nur für sysvinit oder upstart gedacht zu sein.
systemd - ExecStart überschreiben mit Drop-In
Ich habe das Drop-In so konfiguriert, dass es ExecStart=
überschreibt.
Mein naiver (fast richtiger) Ansatz war folgender:
ExecStart=/usr/bin/dockerd -H=0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/server-cert.pem --tlskey=/etc/docker/ssl/server-key.pem
was seitens systemd mit
docker.service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.
quittiert wurde.
ExecStart zurücksetzen und überschreiben
Will man die Einstellung im Drop-in überschreiben, so muss man den Wert erst zurücksetzen:
If the empty string is assigned to this option, the list of commands to start is reset, prior assignments of this option will have no effect.
– Quelle:
[man systemd.service](https://www.freedesktop.org/software/systemd/man/systemd.service.html)
Will man also die Einstellungen überschreiben, so erstellt man folgendes Drop-In /etc/systemd/system/docker.service.d/custom.conf:
ExecStart=
ExecStart=/usr/bin/dockerd -H=0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ssl/ca.pem --tlscert=/etc/docker/ssl/server-cert.pem --tlskey=/etc/docker/ssl/server-key.pem
Jetzt wird der in der ursprünglich angegebene ExecStart Wert zurückgesetzt und die Unit bzw. /usr/bin/dockerd
wird in Zukunft mit den übergeben Parametern gestartet.
Systeme ohne systemd
Für Systeme ohne systemd kann auch die daemon.json Datei genutzt werden, bei systemd lässt sich aber kein hosts
-Eintrag hinzufügen, genau den habe ich aber gebraucht.
On systems that use systemd to start the Docker daemon, -H is already set, so you cannot use the hosts key in daemon.json to add listening addresses.
– Quelle: https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file