2015-01-04 17 views
12

I /etc/default/docker mit DOCKER_OPTS="-H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock" (Docker Version 1.4.1 in ubuntu 14.04) geändert haben, aber es irgendeine Wirkung für mich nicht nehmen Sie (nicht auf Port lauscht 2375). Es scheint, dass docker diese erste Konfigurationsdatei nicht liest, weil ich Umgebung nicht auch gefunden habe.DOCKER_OPTS funktionieren nicht in der Konfigurationsdatei/etc/default/Docker

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

Es hat mich wirklich verwirrt!

+1

Nur um es übersichtlicher zu machen, starten Sie den Docker-Dienst nach der Bearbeitung von '/ etc/default/docker' neu? –

+0

Ja, ich habe es immer wieder neu starten – seanlook

Antwort

1

Nach Docker Quellcode Überprüfung (config.go und flags.go), würde ich sagen, dass die Optionen, die Sie in $DOCKER_OPTS sind Optionen für die Docker passieren kann selbst und -H oder --host ist eine Option für Docker-Daemon. Um dieses Problem zu umgehen, können Sie die Init-Skriptdatei bearbeiten, die Sie verwenden, um die Option -H dort aufzunehmen. Zum Beispiel:

  • Wenn Sie Emporkömmling Init-System verwenden, bearbeiten Sie die Datei /etc/init/docker.conf die exec Linie Wechsel mit exec "$DOCKER" -H "tcp://127.0.0.1:2375" -H "unix:///var/run/docker.sock" -d $DOCKER_OPTS
  • Wenn Sie sysvinit Init-System verwenden, bearbeiten Sie die Datei /etc/init.d/docker die Startlinien mit etwas zu ändern, wie:

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 $? ;;

+0

Shoud '/ etc/default/docker' die Docker Startup-Konfigurationsdatei des Dockers sein? Viele Artikel (einschließlich [offizielle Dokumente] (https://docs.docker.com/articles/networking/)) sagten mir, dass ich "DOCKER_OPTS" in "/ etc/default/docker" nicht in der bash-Umgebung einstellen sollte. – seanlook

+0

Ja, sollte es. Und docker Init-Skripte laden/etc/default/docker. Ich habe getestet und in meiner Umgebung (Linux Mint 17 - Ubuntu 14.04- und Docker 1.4.1) funktioniert, wenn ich 'DOCKER_OPTS =" - H tcp: //127.0.0.1: 2375 -H unix: /// var/run /docker.sock "'. Ich benutze das Standard-Init-System (Upstart), und Sie sollten das gleiche verwenden. Überprüfen Sie die Datei '/ etc/init/docker.conf' um zu sehen, ob sie die Konfigurationsdatei lädt. Es sollte erscheinen: 'if [-f/etc/default/$ UPSTART_JOB]; dann ./etc/default/$ UPSTART_JOB; fi' –

+0

'/ etc/default/docker' funktioniert jetzt für mich nach dem Neustart meines Ubuntu-Servers. – seanlook

3

ich in die "gleiche" Problem führen Sie einfach haben.

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

Ich entfernte die # vor DOCKER_OPTS, neu gestartet und es funktionierte wie vorgesehen.

Ich denke, dass frühere Docker-Versionen (1.3) diese Optionen nicht standardmäßig auskommentiert haben, zumindest kann ich mich nicht erinnern, das # -Zeichen entfernen zu müssen.

+0

Dies half mir, als ich Docker 17.xx + lief und docker-komponieren 1.18 auf ubuntu 16.04 –

7

Ich hatte das gleiche Problem.

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

+0

Der Vollständigkeit halber müssen Sie dann die folgenden Befehle (mit 'sudo' falls notwendig)' systemctl daemon-reload' und 'service docker restart' geben –

+0

Auch,' journalctl' ist ein Nützlicher Befehl zum Anzeigen von Nachrichten, wenn der Dienst nicht gestartet werden kann. –

14

Hier finden Sie weitere Versionen von Debian/Ubuntu, die systemd verwenden.

Dieser Link erklärt, wie man richtig eine systemd Unit-Datei ändern mit DOCKER_OPTS zu arbeiten: https://github.com/docker/docker/issues/9889

im Wesentlichen eine /etc/systemd/system/docker.service.d/docker.conf Datei, die Sie erstellen und Ihre Überschreibungen angeben Dort.

hatte ich so etwas wie die folgenden in der oben genannten zu tun, Datei Docker zu starten mit dem DOCKER_OPTS Umgebungsvariable in einer systemd Umgebung:

[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 

Aktuelle Docker Installationsprozess die systemd Unit-Datei zu vernachlässigen scheint.

+0

Ich war erfolgreich mit einer minimaleren docker.conf, die nur die Teile von '/ lib/systemd/system/docker.service' überschreibt, die ich ändern wollte. – Aneel

19

Empfohlene Way Docker 17.xx +

Es gibt eine Reihe von Möglichkeiten, um die Daemon-Flaggen und Umgebungsvariablen für Ihre Docker-Daemon zu konfigurieren.Die recommended way Datei verwendet die plattformunabhängige daemon.json Datei, die sich standardmäßig unter Linux in /etc/docker/ befindet.

Also, für die Konfiguration von Daemon-Buchse (n) zu verbinden, gehen Sie wie folgt vor:

  1. Setzen Sie das folgende Flag in der daemon.json Datei:

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

    $ sudo systemctl restart docker 
    

Leichter jedes Mal!


Bisher bei Docker 1.x

Nach docker documentation, Es wird empfohlen, die Dämon-Flaggen und Umgebungsvariablen für Ihre Docker-Daemon zu konfigurieren ist ein Drop-in-Datei systemd zu verwenden.

Also, für diesen speziellen Fall, gehen Sie wie folgt vor:

  1. eine Datei /etc/systemd/system/docker.service.d/custom.conf mit folgendem Inhalt erstellen:

    [Service] 
    ExecStart= 
    ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock 
    
  2. Flush Änderungen:

    $ sudo systemctl daemon-reload 
    
  3. Neustart Docker:

    $ sudo systemctl restart docker 
    

Nicht Way Empfohlen

Datei bearbeiten /lib/systemd/system/docker.service

... 
[Service] 
ExecStart=/usr/bin/docker -d -H fd:// $DOCKER_OPTS 
... 
EnvironmentFile=-/etc/default/docker 
... 

ausführen Dann:

$ systemctl daemon-reload 
$ systemctl restart docker 
+0

Der empfohlene Weg hat bei mir nicht komplett funktioniert, weil -H bereits gesetzt ist. Ich musste auch einen Teil der vorherigen Methode https://stackoverflow.com/a/44055659/467082 verwenden – blackbox

1

In Antwort auf die systemd Kommentare in Kombination mit Ubuntu: Ubuntu 14.04 noch verwendet Upstart, also die Änderungen an /etc/default/docker sollte den gewünschten Effekt haben. Es ist nicht bis 15.04, dass Ubuntu standardmäßig systemd verwendet.

Falls Sie Ubuntu 15.04 oder höher haben und daher systemd verwenden müssen, oder wenn Sie sich explizit dafür entscheiden, systemd vor 15 zu verwenden.04, der richtige und einfachste Weg, um die gewünschte Wirkung des OP, ein TCP-Socket, wäre zu bekommen:

  1. die Datei /etc/systemd/system/docker.service.d/docker-tcp.conf den Inhalt unter
  2. Execute sudo systemctl daemon-reload
  3. Execute sudo systemctl restart docker erstellen
  4. hinzufügen

Inhalt der Datei:

[Service] 
ExecStart= 
ExecStart=/usr/bin/docker daemon --host=tcp://127.0.0.1:2375 
0

Ich hatte eine ähnliche Herausforderung. Als ich begann, einige Systeme von Ubuntu 14.04 auf Ubuntu 16.04 zu verschieben. Mein Ziel war es, eine Andock-Konfigurationsdatei mit Docker-Flags (DOCKER_OPTS) für Ubuntu 16.04 (Systemd) und Ubuntu 14.04 (Upstart) außer /etc/docker/daemon.json zu verwenden. Ich habe entschieden, /etc/docker/daemon.json nicht für die Konfiguration des Docker-Daemons zu verwenden, da JSON keine Kommentare unterstützt.

Ich wollte ein Systemdesign, um eine Override-Datei zu verwenden, die nur Andock-Flags ändert. Es verwendet die Standard-Docker-Systemd-Konfigurationsdatei (/lib/systemd/system/docker.service) für andere Docker-Einstellungen. Ein weiteres Ziel war es, systemd auf jedem System nach jeder Änderung oder jedem Boot anzupassen.

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