web-dev-qa-db-fra.com

Le démon Docker ne démarre pas au démarrage sur CoreOS

J'ai une installation Vanilla de CoreOS (835.9.0) et elle ne démarre pas le démon docker au démarrage. Il ne démarre que lorsque je SSH et fais par exemple docker ps.

Comment puis-je faire démarrer automatiquement le démon docker au démarrage du système?

Quand je dis le démon docker, je veux dire ps -ef | grep docker ne montre aucun processus jusqu'à ce que je le fasse docker ps

26
Chris

Sudo systemctl enable docker a fait l'affaire.

45
Chris

C'est un peu vieux maintenant, mais j'ai commencé à utiliser cloud-init pour le faire sur tous les nouveaux serveurs. J'ai un script cloud-init que j'utilise pour tous mes serveurs. Une partie contient:

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

Cela activera le service Docker et le démarrera au premier et à chaque démarrage.

6
captncraig

Comme déjà expliqué dans ce commentaire par Rob , le docker est activé par socket. Cela signifie que le démon ne démarre que s'il est appelé. Les réponses existantes fonctionnent ici, mais CoreOS recommande une approche différente.

La façon recommandée de le faire, selon la documentation CoreOS est de créer un service pour votre propre application qui à son tour nécessite le service Docker:

/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

Et que ce service démarre automatiquement à la place:

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

L'exemple d'utilisation consiste à mettre à jour le conteneur vers la dernière version une fois que le service démarre et l'exemple avancé enregistre également le service dans etcd. Lisez la documentation CoreOS pour plus d'informations de fond.

2
Neograph734

J'utilise Docker Swarm, donc je n'ai pas d'application spécifique pour que systemd soit responsable ... J'ai juste besoin de docker pour démarrer au démarrage. C'est la solution que j'ai trouvée.

Mettez ce /etc/systemd/system/poke-docker.service:

[Unit]
After=default.target

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

[Install]
WantedBy=default.target

Et puis juste systemctl enable poke-docker Pour le configurer pour qu'il se déclenche à chaque démarrage, vers la fin de la séquence de démarrage. La commande docker version Parle au démon docker, déclenchant le socket et démarrant le service docker lui-même.

J'ai essayé l'astuce systemctl enable docker Dans l'autre réponse, et même si cela a fonctionné au début, cela semble avoir provoqué une situation de troupeau tonitruante où Docker essayait apparemment de faire beaucoup et échouait lamentablement. Je soupçonne que c'est le comportement de "blocage de la chaîne de démarrage" mentionné dans les commentaires.

1
Colin Dunklau