Docker Startup Multiple не работает - PullRequest
0 голосов
/ 17 июня 2019

Dockerfile

FROM drupal

RUN apt-get update
RUN apt-get install openssh-server -y
RUN apt-get install -y supervisor

#SS Related Fix : https://github.com/Microsoft/WSL/issues/3621
RUN mkdir -p /run/sshd

# SS Access Configuration
RUN echo "root:Docker!" | chpasswd

#Project Uplaod
RUN rm -rf /var/www/html/*
COPY ./html/ /var/www/html/


# Startup Configuration
COPY servername.conf /etc/apache2/conf-enabled/servername.conf
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf


CMD ["/usr/bin/supervisord"]

Команда запуска : docker -D run -p 80:80 -p 2222: 22 -it / bin / bash

[supervisord]
nodaemon=true

[program:SSH]
command=/usr/sbin/sshd start


[program:Apache]
command=/etc/init.d/apache2 start

когда я прыгаю в Shell и запускаю эту команду, она работает, но когда я запускаю контейнер, он не запускает веб-сервер.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Когда вы запускаете

docker -D run -p 80:80 -p 2222:22 -it /bin/bash

Последняя часть команды, /bin/bash, заменяет CMD в Dockerfile, поэтому вы only получаете оболочку GNU bash.Вы должны удалить эту часть строки, и стандартная команда из вашего образа будет запущена.

Вы можете подумать, насколько вам на самом деле нужна интерактивная оболочка в вашей среде Docker.Большинство образов приложений настроены на самостоятельную работу без шагов ручной настройки;сравните, например, изображения mysql или nginx, которые не включают в себя какую-либо систему удаленного входа.Также учтите, что любой, кто может запустить docker history, теперь может легко узнать ваш пароль root, и у вас нет возможности управлять ключами хоста sshd.Я бы предложил удалить всю эту систему supervisord / sshd и просто упаковать ваше приложение.

0 голосов
/ 17 июня 2019

Как в документации

Чтобы запустить супервизор, запустите $ BINDIR / супервизор. В результате процесс демонизирует себя и отсоединится от терминала. Это держит журнал операций в $ CWD / supervisor.log по умолчанию.

Вы можете запустить исполняемый файл supervisord на переднем плане, передав флаг -n в командной строке. Это полезно для отладки запуска проблемы.

Итак, systemd отсоединяется от основного процесса, что означает для докера, что процесс завершился - выход из контейнера Чтобы решить вашу проблему, вам нужно изменить раздел CMD на

CMD ["/usr/bin/supervisord", "-n"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...