Widziałem kilka tutoriali, które wydają się robić to samo, co próbuję zrobić, ale z jakiegoś powodu moje kontenery Docker wyjść. Zasadniczo konfiguruję serwer WWW i kilka demonów w kontenerze Docker. Robię końcowe części tego poprzez skrypt bash o nazwie run-all.sh
, który uruchamiam przez CMD w moim pliku Dockerfile. run-all.sh
wygląda następująco:Jak przechowywać kontener Docker po uruchomieniu usług?
service supervisor start
service nginx start
i zaczynam go wewnątrz mojego Dockerfile następująco:
CMD ["sh", "/root/credentialize_and_run.sh"]
widzę, że usługi, wszystkie zaczynają się poprawnie, gdy uruchomię rzeczy ręcznie (tj wsiąść do obraz z opcją -i -t/bin/bash) i wszystko wygląda tak, jakby działało poprawnie po uruchomieniu obrazu, ale kończy się po zakończeniu uruchamiania moich procesów. Chciałbym, aby procesy były uruchamiane w nieskończoność i, o ile rozumiem, kontener musi działać, aby to się stało. Mimo to po uruchomieniu docker ps -a
widzę:
➜ docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
Co daje? Dlaczego to wychodzi? Wiem, że mogłem po prostu zatrzymać pętlę na końcu skryptu basha, żeby to utrzymać, ale jaki jest właściwy sposób, aby go nie wychodzić?
czy wystawiasz porty usług na zewnątrz (opcja -p do dokowania)? (oczywiście nie przeszkadza im to wyjść) – ribamar