Можно ли запускать nginx автоматически при каждом запуске в контейнере Docker? - PullRequest
0 голосов
/ 01 октября 2019

Я новичок в докере.

Я настраиваю сервер nginx для обслуживания статических файлов в контейнере Docker. Я хотел бы включить автоматический запуск nginx при каждом запуске внутри контейнера Docker.

Я пытался изменить ENTRYPOINT, CMD и crontab при сборке DockerImage. Но эти настройки запуска nginx при каждом запуске работают только при первом запуске контейнера. Когда я «останавливаю» контейнер и «запускаю» его снова, nginx не запускается автоматически внутри контейнера.

Я ищу способ запуска nginx при каждом запуске контейнера, и мой первый вопрос «возможно ли это сделать?»

Мой второй вопрос о цикле контейнера,Учитывая, что по этому вопросу не так много дискуссий (все обсуждения касаются автоматического запуска скрипта или чего-то еще в момент «запуска»), мне интересно, будет ли эффективнее «запускать» и «убивать» контейнер каждый разчем просто «остановка» и «запуск» контейнера.

Вот строки кода, которые я пробовал для DockerImage (с crontab), который был моей первой попыткой.

RUN apt-get install -y cron
COPY run_server /etc/cron.d/run_server
RUN chmod 0644 /etc/cron.d/run_server
RUN crontab /etc/cron.d/run_server
RUN touch /var/log/cron.log
CMD cron && tail -f /var/log/cron.log

run_server - это простой файл конфигурации crontab, который включает:

@reboot service nginx start

Поскольку это не было решением, которое я искал (оно работало только тогда, когда я "запускал" aconainer, а не "остановленный" и "запущенный" контейнер) Я тоже пытался с supervisor.

RUN apt-get -y install supervisor && \
  mkdir -p /var/log/supervisor && \
  mkdir -p /etc/supervisor/conf.d
ADD supervisor.conf /etc/supervisor.conf
CMD ["supervisord", "-c", "/etc/supervisor.conf"]

supervisor.confg содержит:

[supervisord]
nodaemon=true

[program:run_server]
command=/usr/bin/python3.6 /home/server.py
autostart=true
directory=/home
redirect_stderr=true

Но ни один из них не работал так, как я хотел ..

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

my Dockerfile, контейнер (CentOS 8 и nginx) linux mint 19.3 Docker версия 19.03.4

# howto:   Dockerfile
# CentOS 8 and nginx  
#  docker build -t centose .
#  docker run -it -p 80:80 centose
#    curl localhost 

FROM centos:latest
# MAINTAINER їван 
RUN yum -y install nginx 
EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
#WORKDIR /usr/sbin/
0 голосов
/ 02 октября 2019

Я бы попытался обновить файл Docker и включить службу nginx, чтобы она запускалась при следующей перезагрузке.

Вот несколько способов:

RUN systemctl enable nginx
RUN systemctl enable nginx
RUN service nginx enable

Другой способ - добавить скрипт начальной загрузки, который запускает службу:

#!/bin/bash
sudo service nginx start
tail -f /var/log/nginx/error.log

Убедитесь, что bootstrap.sh является исполняемым, то есть sudo chmod +x bootstrap.sh.

Затем обновите файл Docker:

COPY boostrap.sh /bin/.

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