it-swarm.com.de

Der Docker-Daemon startet beim Booten unter CoreOS nicht

Ich habe eine Vanilla-Installation von CoreOS (835.9.0) und der Docker-Daemon wird beim Start nicht gestartet. Es beginnt erst, wenn ich SSH einnehme und zB docker ps.

Wie kann ich den Docker-Daemon beim Systemstart automatisch starten lassen?

Wenn ich den Docker-Daemon sage, meine ich ps -ef | grep docker zeigt keine Prozesse bis ich docker ps

26
Chris

Sudo systemctl enable docker hat den Trick gemacht.

45
Chris

Dies ist jetzt ein bisschen alt, aber ich habe begonnen, Cloud-Init zu verwenden, um dies auf allen neuen Servern zu tun. Ich habe ein gespeichertes Cloud-Init-Skript, das ich für alle meine Server verwende. Ein Teil davon enthält:

#cloud-config
coreos:
  units:
    - name: "docker.service"
      command: "start"
      enable: true

Dadurch wird der Docker-Dienst aktiviert und bei jedem Start zuerst gestartet.

6
captncraig

Wie bereits in dieser Kommentar von Rob erklärt, ist Docker Socket aktiviert. Das bedeutet, dass der Deamon erst startet, wenn er aufgerufen wird. Die vorhandenen Antworten hier funktionieren, aber CoreOS empfiehlt einen anderen Ansatz.

Der empfohlene Weg, dies gemäß CoreOS-Dokumentation zu tun, besteht darin, einen Dienst für Ihre eigene App zu erstellen, für den wiederum der Docker-Dienst erforderlich ist:

/etc/systemd/system/myapp.service:

[Unit]
Description=MyApp
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill busybox1
ExecStartPre=-/usr/bin/docker rm busybox1
ExecStartPre=/usr/bin/docker pull busybox
ExecStart=/usr/bin/docker run --name busybox1 busybox /bin/sh -c "trap 'exit 0' INT TERM; while true; do echo Hello World; sleep 1; done"

[Install]
WantedBy=multi-user.target

Und lassen Sie diesen Dienst stattdessen automatisch starten:

$ Sudo systemctl enable /etc/systemd/system/myapp.service
$ Sudo systemctl start hello.service

Der Beispielanwendungsfall besteht darin, den Container nach dem Start des Dienstes auf die neueste Version zu aktualisieren, und das erweiterte Beispiel registriert den Dienst auch in etcd. Weitere Hintergrundinformationen finden Sie in der CoreOS-Dokumentation .

2
Neograph734

Ich verwende Docker Swarm, daher habe ich keine spezielle App, für die systemd verantwortlich ist ... Ich brauche nur Docker, um beim Booten zu starten. Dies ist die Lösung, die ich ausgearbeitet habe.

Stell Dies /etc/systemd/system/poke-docker.service:

[Unit]
After=default.target

[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes

[Install]
WantedBy=default.target

Und dann einfach systemctl enable poke-docker, um es so einzurichten, dass es bei jedem Start gegen Ende der Startsequenz ausgelöst wird. Das docker version Befehl kommuniziert mit dem Docker-Daemon, löst den Socket aus und startet den Docker-Dienst selbst.

Ich habe versucht, die systemctl enable docker Trick in der anderen Antwort, und während es zuerst funktionierte, scheint es eine donnernde Herdensituation verursacht zu haben, in der Docker anscheinend versuchte, eine ganze Menge zu tun und kläglich zu scheitern. Ich vermute, dass dies das in den Kommentaren erwähnte Verhalten "Blockieren der Bootkette" ist.

1
Colin Dunklau