繁体   English   中英

Docker 退出容器

[英]Docker exits container

我正在尝试为 apache2 和 PHP 构建自己的 docker 映像。 谁能告诉我为什么我的容器在运行 ["apache2ctl", "-D", "FOREGROUND"] 时会在运行后退出?

FROM ubuntu:latest
RUN apt update -y && apt upgrade -y
RUN apt install software-properties-common -y
RUN add-apt-repository ppa:ondrej/php -y
RUN apt update -y && apt upgrade -y
ARG DEBIAN_FRONTEND=noninteractive
RUN DEBIAN_FRONTEND=noninteractive apt install -y nano vim iputils-ping sudo git curl php php-cli php-fpm
RUN apt install -y php-json php-mysql
RUN apt install -y php-zip php-mbstring php-curl php-xml php-pear php-bcmath
RUN apt install psmisc -y

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOF_DIR /var/log/apache2

# RUN useradd -ms /bin/bash devwl

EXPOSE 80/tcp

ENTRYPOINT ["/bin/sh", "-c"]
CMD ["apache2ctl", "-D", "FOREGROUND"]

构建命令:

docker build -t www .

运行命令:

docker run -itd -p 80:80 www

输出泊坞窗 ps: 在此处输入图像描述

刚刚尝试构建您的 Dockerfile。 docker logs显示启动命令有问题。 运行没有-D选项的容器效果很好......

CMD ["apache2ctl", "start"]

您需要在 conf 文件中使用 <IfDefine ...> 吗?

您需要删除ENTRYPOINT行。

由于您同时拥有一个ENTRYPOINT和一个CMD ,它们被组合成一个单独的参数列表 这意味着你有一个有效的命令,比如

ENTRYPOINT+CMD ["/bin/sh", "-c", "apache2ctl", "-D", "FOREGROUND"]

但是sh -c只读取单个 next 参数并执行它。 其余参数可以在该字符串中作为位置参数$0$1 ,...访问,但除非您引用其中一个,否则您最终运行的命令只是没有参数的apachectl

如果您的命令使用 shell 功能(引用环境变量或运行多个命令),您只需要调用 shell。 你的没有,所以你不需要任何提到外壳的东西; 只需删除ENTRYPOINT并让现有的CMD启动 Apache。

在 Dockerfile 中,您通常根本不需要说sh -c 如果确实需要调用 shell 来运行某些命令,则可以使用Docker shell 语法作为纯字符串,而无需 JSON-array 语法; 例如

# needs a shell because of $VARIABLE and command; command syntax
CMD touch "$APACHE_LOG_DIR/started"; exec apache2ctl -DFOREGROUND

(如果您确实需要使用docker run参数或在 Compose command:中覆盖此命令,这些语法将不会自动插入外壳包装器,如果您需要外壳,您确实需要明确地说sh -c 'some command'处理命令字符串;再次注意单引号以使命令字符串成为单个参数。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM