Problemem jest twoje podejście. Docker nie ma systemu init, do którego przywykłeś w tradycyjnych systemach. Docker to zastępowanie PID 1 z procesem określonym w CMD
lub ENTRYPOINT
Polecenia dockerfile. Na razie zignoruj ENTRYPOINT
, ponieważ zastępuje to, co Twój CMD
jest uruchamiany z (zwykle jest to /bin/sh -c
). Musisz poinstruować docker, aby uruchomił usługę mongod w pliku Dockerfile za pomocą CMD
polecenie, takie jak:
CMD usr/bin/mongod
A kiedy uruchomisz swój kontener, mongod będzie twoim PID 1. Teraz prawdopodobnie zastanawiasz się w tym momencie "Ale co z moim serwerem SSH?" a odpowiedź brzmi:nie uruchamiaj serwera SSH na swoich kontenerach dockera. Są są niektóre przypadki użycia, w których uruchomienie serwera SSH jest w porządku, ale prawie wszystkie „normalne” powody (debugowanie, kontrola C&C itp.) są anulowane przez „najlepszą praktykę” uzyskiwania powłoki w kontenerze:
docker exec -it myContainer /bin/bash
Spowoduje to wrzucenie Cię do powłoki na uruchomionym kontenerze. Zaleceniem dotyczącym zarządzania konfiguracją i zmianami w kontenerze dockera jest użycie czegoś takiego jak Ansible. Pamiętaj jednak, że kontenery dockera są efemeryczne i nie powinieneś ponownie uruchamiać usług i zmieniać ich stanu konfiguracji. Jeśli potrzebujesz zmiany konfiguracji, zmień plik Dockerfile lub dane konfiguracyjne, a następnie uruchom nowy kontener. Powodzenia! Tutaj
to trochę więcej informacji na temat Dockerizing MongoDB, ale pamiętaj, że opisana tam metoda zmienia ENTRYPOINT
w pliku Dockerfile, który jest nieco bardziej zaangażowany i wymaga lepszego zrozumienia tego, co dzieje się w plikach Docker.