it-swarm.com.de

DOCKER_OPTS funktionieren nicht in der Konfigurationsdatei/etc/default/docker

Ich habe /etc/default/docker mit DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock" geändert (Docker-Version 1.4.1 in Ubuntu 14.04), aber es wirkt sich nicht auf mich aus (hört nicht an Port 2375). Es scheint, dass Docker diese anfängliche Konfigurationsdatei nicht liest, da ich fand, dass export http_proxy Umwelt nicht auch funktioniert.

Nur Sudo docker -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock -d funktioniert.

Es hat mich wirklich verwirrt!

16
seanlook

Laut Dokumentation in docker , Die empfohlene Methode zum Konfigurieren der Daemonflags und Umgebungsvariablen für Ihren Docker-Daemon ist die Verwendung von systemd _ ​​Drop-In-Datei

Führen Sie für diesen speziellen Fall also Folgendes aus:

  1. Verwenden Sie den Befehl Sudo systemctl edit docker.service, um eine Überschreibungsdatei für docker.service in einem Texteditor zu öffnen.

  2. Fügen Sie die folgenden Zeilen hinzu oder ändern Sie sie, indem Sie Ihre eigenen Werte verwenden.

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock
    
  3. Speicher die Datei.

  4. Laden Sie die systemctl-Konfiguration erneut.

     $ Sudo systemctl daemon-reload
    
  5. Docker neu starten:

     $ Sudo systemctl restart docker.service
    
  6. Prüfen Sie, ob die Änderung berücksichtigt wurde, indem Sie die Ausgabe von netstat überprüfen, um zu bestätigen, dass dockerd den konfigurierten Port überwacht.

    $ Sudo netstat -lntp | grep dockerd
    tcp        0      0 127.0.0.1:2375          0.0.0.0:*               LISTEN      3758/dockerd
    
27
Camilo Silva

Hier finden Sie spätere Versionen von Debian/Ubuntu, die systemd verwenden.

Dieser Link erläutert, wie Sie eine systemd-Einheitendatei korrekt ändern, um mit DOCKER_OPTS zu arbeiten: https://github.com/docker/docker/issues/9889

Im Wesentlichen erstellen Sie eine /etc/systemd/system/docker.service.d/docker.conf -Datei und geben dort Ihre Überschreibungen an.

In der oben genannten Datei musste ich etwa Folgendes tun, um Docker mit der Umgebungsvariable DOCKER_OPTS in einer systemd-Umgebung zu starten:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker -d $DOCKER_OPTS -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

Der aktuelle Docker-Installationsvorgang scheint die systemd-Einheitendatei zu vernachlässigen.

14
Ross

Ich hatte das gleiche Problem.

Ubuntu 14.10 verwendet systemd anstelle von sysv-init/upstart. Vielleicht sollten Sie in /lib/systemd/system/docker.service nachsehen, um die Optionen zu ändern.

7
kuttifunk

Ich bin gerade auf das "gleiche" Problem gestoßen.

Ich habe festgestellt, dass alle Optionen in/etc/default/docker standardmäßig auskommentiert sind.

Ich entfernte das # vor DOCKER_OPTS, startete neu und es funktionierte wie beabsichtigt.

Ich glaube, dass in früheren Docker-Versionen (1.3) diese Optionen nicht standardmäßig auskommentiert wurden. Zumindest kann ich mich nicht erinnern, das # -Zeichen entfernen zu müssen.

3
Daniel

Als Antwort auf die systemd-Kommentare in Kombination mit Ubuntu: Ubuntu 14.04 verwendet weiterhin Upstart, daher sollten die Änderungen an /etc/default/docker die gewünschte Auswirkung haben. Erst ab 15.04 verwendet Ubuntu standardmäßig systemd.

Falls Sie Ubuntu 15.04 oder höher verwenden und daher systemd verwenden müssen, oder wenn Sie systemd vor 15.04 verwenden, ist der richtige und einfachste Weg, den gewünschten Effekt des OPs zu erzielen, ein TCP - Socket :

  1. Erstellen Sie die Datei /etc/systemd/system/docker.service.d/docker-tcp.conf
  2. Füge den Inhalt unten hinzu
  3. Sudo systemctl daemon-reload ausführen
  4. Sudo systemctl restart docker ausführen

Dateiinhalt:

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --Host=tcp://127.0.0.1:2375
1
Forage

Nach der Überprüfung des Docker-Quellcodes ( config.go und flags.go ) würde ich sagen, dass die Optionen, die Sie in $DOCKER_OPTS übergeben können, Optionen für das Docker selbst sind und -H oder --Host eine Option für den Docker-Daemon sind . Um das Problem zu lösen, können Sie die von Ihnen verwendete Init-Skriptdatei bearbeiten, um die -H-Option dort einzuschließen. Zum Beispiel:

  • Wenn Sie das Upstart-Init-System verwenden, bearbeiten Sie die Datei /etc/init/docker.conf und ändern Sie die Ausführungszeile mit exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS.
  • Wenn Sie das sysvinit init-System verwenden, bearbeiten Sie die Datei /etc/init.d/docker, indem Sie die Startzeilen wie folgt ändern:

Verwenden Sie diesen Befehl:

start-stop-daemon --start --background \
    --no-close \
    --exec "$DOCKER" \
    --pidfile "$DOCKER_SSD_PIDFILE" \
    --make-pidfile \
    -- \
        -H "tcp://127.0.0.1:2375" \
        -H "unix:///var/run/docker.sock" \
        -d -p "$DOCKER_PIDFILE" \
        $DOCKER_OPTS >> \
        "$DOCKER_LOGFILE" 2>&1 
    log_end_msg $?
    ;;
1

Die Verwendung der platform independentdaemon-configuration-file scheint viel sauberer zu sein.

Fügen Sie "hosts" zu Ihrem /etc/docker/daemon.json (oder /custom/path/to/daemon/config.json hinzu, wenn Sie die --config-file-Option beim Starten der dockerd verwenden):

{
...
"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"],
...
}

starten Sie den Daemon neu:

Sudo systemctl restart docker
0
Kashyap

Nun, ich habe eine Menge Probleme beim Spinnen von Jenkins-Sklaven auf Abruf, weil der Docker-Daemon-Port Beschränkungen unterliegt.

so tat ich

Sudo systemctl edit docker.service

Hinzugefügt unter Abschnitt

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --Host=tcp://0.0.0.0:2375

Speicher die Datei

führen Sie den folgenden Befehl aus

$ Sudo systemctl daemon-reload
$ Sudo systemctl restart docker.service

** ANMERKUNG: Dadurch wird Ihr Dämon öffentlich zugänglich gemacht und jeder mit Ihrer IP-Adresse und Ihrem Port kann alles mit Ihrem Docker-Dämon machen **

0

Ich hatte eine ähnliche Herausforderung. Als ich anfing, einige Systeme von Ubuntu 14.04 auf Ubuntu 16.04 zu verschieben. Mein Ziel war es, eine Dockerd-Konfigurationsdatei mit Dockerd-Flags (DOCKER_OPTS) für Ubuntu 16.04 (systemd) und Ubuntu 14.04 (Upstart) mit Ausnahme von /etc/docker/daemon.json zu verwenden. Ich entschied mich für /etc/docker/daemon.json für die Docker-Daemon-Konfiguration, da Json keine Kommentare unterstützt. 

Ich wollte, dass ein Systemd-Entwurf eine Überschreibungsdatei verwendet, die nur Andock-Flags ändert. Es verwendet die Standard-Konfigurationsdatei von Docker systemd (/lib/systemd/system/docker.service) für andere Docker-Einstellungen. Ein weiteres Ziel war es, systemd auf jedem System nach jeder Änderung oder jedem Start anzupassen.

Es löst meine Herausforderung. Es kann dir helfen.

https://github.com/BradleyA/docker-scripts/tree/master/dockerd-configuration-options

git clone https://github.com/BradleyA/docker-scripts
cd docker-scripts/dockerd-configuration-options
0
Bradley Allen