Контейнер Ubuntu Docker немедленно останавливается, проблема с Dockerfile? - PullRequest
0 голосов
/ 04 апреля 2019

Я довольно новичок в Docker, и совершенно сбит с толку, почему мой контейнер выходит при запуске.

Я создал образ Ubuntu, который запускает Apache и fail2ban при загрузке. Я не уверен, является ли это проблемой с Dockerfile или командой, которую я запускаю для запуска контейнера.

Я пробовал:

docker run -d -p 127.0.0.1:80:80 image
docker run -d -ti -p 127.0.0.1:80:80 image
docker run -d -ti -p 127.0.0.1:80:80 image /bin/bash

Dockerfile выглядит следующим образом:

FROM ubuntu:latest

RUN \
  apt-get update && \
  apt-get -y upgrade && \
  apt-get install -y build-essential && \
  apt-get install -y iptables && \
  apt-get install -y software-properties-common && \
  apt-get install -y apache2 fail2ban && \
  rm -rf /etc/fail2ban/jail.conf

ADD index.html /var/www/html/
ADD jail.conf /etc/fail2ban/

ENV  HOME /root
WORKDIR /root

EXPOSE 80 443

ENTRYPOINT service apache2 start && service fail2ban start
CMD ["bash"]

Я могу прыгнуть в сам контейнер с помощью:

docker exec -it image /bin/bash

Но в тот момент, когда я пытаюсь запустить его, оставаясь внутри хоста, он не работает. Помощь

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Учитывая ваш вопрос, где вы упоминаете "при загрузке", я думаю, что было бы полезно прочитать https://docs.docker.com/config/containers/multi-service_container/.

В докерских контейнерах в двух словах не «загружаются» как обычные системы, они запускают процесс и выполняют его до его завершения.

Итак, если вы хотите запустить два процесса, вы можете создать скрипт-обертку, как описано по ссылке выше.

1 голос
/ 04 апреля 2019

Удалите следующую строку из вашего Dockerfile:

CMD ["bash"]

Также, когда вы хотите вставить оболочку в ваш контейнер, вы должны переопределить определение ENTRYPOINT вашего Dockerfile:

docker exec -it --entrypoint "/bin/bash" image

См. Документация Dockerfile "ENTRYPOINT" для получения более подробной информации

...