Ubuntu Docker容器会立即停止,问题是Dockerfile吗?

问题描述 投票:-1回答:2

我对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

但是当我试图在主机内部运行时,它失败了。救命?

linux docker containers dockerfile
2个回答
2
投票

考虑到你的问题,你提到“启动时”,我认为阅读https://docs.docker.com/config/containers/multi-service_container/会很有用。

简而言之,docker容器不像普通系统那样“启动”,它们启动一个进程并执行它直到它退出。

因此,如果要启动两个进程,可以执行包装脚本,如上面的链接所述。


1
投票

从Dockerfile中删除以下行:

CMD ["bash"]

此外,当您想要将shell添加到容器中时,您必须覆盖Dockerfile的ENTRYPOINT定义:

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

有关详细信息,请参阅Dockerfile "ENTRYPOINT" documentation

© www.soinside.com 2019 - 2024. All rights reserved.