Vraag Hoe start ik Docker-containers automatisch bij het opstarten van het systeem?


Wat is een goede manier om dockercontainers automatisch te starten wanneer het systeem opstart?

Is er een voorkeursmanier om dit te doen op Ubuntu 14.04?

Ik heb gebruikt supervisord in het verleden om web-apps automatisch te starten. Maar dat voelt niet als het juiste voor Docker.


99
2017-10-02 14:25


oorsprong




antwoorden:


Blijkbaar is de huidige methode om Docker-containers automatisch te starten (van Docker 1.2) is om te gebruiken herstart beleid. Dit bepaalt hoe Docker het starten van de container moet afhandelen bij het opstarten en opnieuw starten van de container wanneer deze wordt afgesloten. Ik heb tot nu toe de 'always'-optie gebruikt en kan bevestigen dat Docker de container automatisch start bij het opstarten van het systeem:

sudo docker run --restart=always -d myimage

Documentatie Fragment

Beleid opnieuw starten met de --restart-vlag op Docker-run die u kunt   specificeer een herstartbeleid voor hoe een container wel of niet moet zijn   herstart bij afsluiten.

nee - Start de container niet opnieuw op wanneer deze wordt afgesloten.

on-failure - Start de container alleen opnieuw als deze wordt afgesloten met een niet-nulwaarde   uitgangsstatus.

altijd - Start de container altijd opnieuw, ongeacht de uitgangsstatus.

U kunt ook het maximale aantal keren opgeven dat Docker zal proberen   start de container opnieuw op bij gebruik van het beleid bij niet-naleving. De standaard is   dat Docker voor altijd zal proberen de container opnieuw te starten.

$ sudo docker run --restart=always redis

Dit zal het opnieuw doen   container met een herstartbeleid van altijd zo dat als de container   wordt afgesloten, Docker start het opnieuw.

$ sudo docker run --restart=on-failure:10 redis

Hiermee wordt het   redis container met een herstartbeleid van on-failure en een maximum   herstart aantal van 10. Als de container opnieuw wordt geopend met een uitgang die niet nul is   status meer dan 10 keer op rij Docker zal afgebroken proberen opnieuw te starten   de houder. Het geven van een maximale herstartlimiet is alleen geldig voor de   on-failure beleid.


120
2017-12-07 20:18



"altijd - altijd de container opnieuw opstarten ongeacht de uitgangsstatus" is een beetje verwarrend. Het zal de container niet opnieuw opstarten als u de container handmatig afsluit / stopt, wat het gedrag is waarnaar ik op zoek was. - w00t
geweldig! bedankt, probeer het nu. - zx1986
Opmerking: een ander beleid genoemd unless-stopped was toegevoegd. Het gedraagt ​​zich als always maar Als de container wordt gestopt en het systeem opnieuw wordt opgestart of de Docker-daemon opnieuw wordt opgestart, wordt de container niet opnieuw gestart. Kijk hier voor een mooie beschrijving van alle 4 opties blog.codeship.com/... - David Morales
Natuurlijk, de docker daemon moet automatisch starten om dit te ondersteunen. - sherrellbc


Docker heeft deze pagina dat verklaart hoe je het moet doen met parvenu en systemd. Ik ben het ermee eens dat het voor Docker niet het goede lijkt. Hun oplossing is om te rennen docker start, waarbij wordt aangenomen dat je je container al hebt gemaakt. Ik zou denken dat je het zou doen docker run --rm in het upstart-script (behandel het als een geheel nieuw proces en container van een afbeelding) of laat de Docker daemon de containers zelf herstarten tijdens het booten (zoals het standaard zal doen als je niets anders doet). Upstart heeft het voordeel dat processen eenvoudig kunnen worden gestart / gestopt, maar dat krijg je ook met start / stop van docker!

Ik vind het raar om de gebruiker te dwingen handmatig een container te maken (met alle juiste poort / volume-bindingen) voordat het upstart-script zal werken.


7
2017-10-14 04:49





Maar dat voelt niet als het juiste voor Docker.

Waarom niet?

Ik gebruik supervisord hiervoor met groot succes.

Gebruik wat je weet, gebruik wat werkt, gebruik iets dat je gemakkelijk kunt onderhouden en begrijpen.


4
2017-10-02 14:27



Bedankt @EEAA .. betekent dit dat je ze uitvoert in niet-daemon-modus? Betekent dit ook niet dat je ze moet uitvoeren? --rm ? - Stefan Arentz
Ik voer de containers in de voorgrondmodus uit en laat supervisord stdout / stderr vangen. Ik weet niet zeker waarom --rm is hier relevant. - EEAA
@EEAA: over uw vraag: voor sommige mensen, docker is een vervanging voor lxc of openvz die hebben lxc.start.auto = 1 en vzctl set --onboot yes. Ook ESXi en andere virtualisatie-oplossingen hebben zo'n functie inbegrepen. Net als Lawrence, denk ik ook niet dat een dergelijke automatische start-functie op een distributiespecifieke manier moet worden geïmplementeerd, omdat een gebruiker van een docker hetzelfde probleem met dezelfde kennis op elk platform zou moeten kunnen oplossen. - Daniel Alder
Rechts, Docker is een geweldige manier om de host te ontkoppelen van het draaien van containers, dus met behulp van host-specifieke configuratie is een beetje een stap terug. - nijave