Проблемът тук е вашият подход. Docker няма система за стартиране, както сте свикнали в традиционните системи. Това, което докерът прави, е замяна PID 1 с процеса, който посочите в CMD
или ENTRYPOINT
Dockerfile команди. Засега игнорирайте ENTRYPOINT
, защото замества вашия CMD
се изпълнява с (обикновено това е /bin/sh -c
). Трябва да инструктирате докер да стартира вашата услуга mongod във вашия Dockerfile с CMD
команда, като:
CMD usr/bin/mongod
И когато стартирате вашия контейнер, mongod ще бъде вашият PID 1. Вероятно се чудите в този момент „Но какво да кажем за моя SSH сървър?“ и отговорът е:Не стартирайте SSH сървър на вашите докер контейнери. Има има някои случаи на употреба, при които работата на SSH сървър е наред, но почти всички „нормални“ причини (отстраняване на грешки, C&C и т.н.) се анулират с „най-добрата практика“ за получаване на обвивка на вашия контейнер:
docker exec -it myContainer /bin/bash
Това ще ви пусне в черупка на работещия ви контейнер. Препоръката тук за управление на конфигурацията и промените във вашия докер контейнер е да използвате нещо като Ansible. Не забравяйте обаче, че докер контейнерите са ефимерни и не трябва да рестартирате услугите и да променяте състоянието на конфигурацията им. Ако имате нужда от промяна на конфигурацията, променете Dockerfile или конфигурационните данни и след това стартирайте нов контейнер. Късмет! Тук
е малко повече информация за Dockerizing MongoDB, но имайте предвид, че описаният там метод променя ENTRYPOINT
в Dockerfile, което е малко по-ангажирано и изисква по-добро разбиране на случващото се в Dockerfiles.