你好,我有一个docker的问题,最近我使用dockerfile创建一个“mosquitto-mqtt”的图像,使我自己的破坏mqtt与ssl保护。我建立dockerfile一切都很好,我没有问题,但如果我运行一个新的容器与“docker run -itd --name broken ce69ee4b2f4e”一个容器运行并自动退出,如果检查日志一切都很好“[好的。]启动网络守护进程:: mosquitto。“我没有为什么?检查我的dockerfile。我需要帮助来解决它,谢谢你
#Download base image debian
FROM debian:latest
#Update system
RUN apt-get update -y
#Install Wget and gnup2
RUN apt-get install wget -y && apt-get install gnupg2 -y
#Download and add key
RUN wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
RUN apt-key add mosquitto-repo.gpg.key
RUN rm mosquitto-repo.gpg.key
## append apt mirror for debian
RUN echo "# mirror" >> /etc/apt/source.list
RUN echo "deb http://repo.mosquitto.org/debian stretch main" >> /etc/apt/source.list
#Update and upgrade system
RUN apt-get update -y && apt-get upgrade -y
#install mosquitto
RUN apt-get install mosquitto -y
#Copy file configuration
COPY mosquitto.conf /etc/mosquitto
#Copy certificate folder
COPY certs/mosquitto-ca.crt /etc/mosquitto/certs
COPY certs/mosquitto-server.crt /etc/mosquitto/certs
COPY certs/mosquitto-server.key /etc/mosquitto/certs
#Run command
ENTRYPOINT ["/etc/init.d/mosquitto", "start"]
日志打印
[ ok .] Starting network daemon:: mosquitto.
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d00bd23ae2d6 ce69ee4b2f4e "/etc/init.d/mosquit…" 9 minutes ago Exited (0) 9 minutes ago broken
容器是进程的包装器,当进程退出时,容器退出。在这种情况下:
ENTRYPOINT ["/etc/init.d/mosquitto", "start"]
这个过程是/etc/init.d/mosquitto
几乎肯定会运行,在后台生成一个守护进程,然后退出(init.d中的任何标准)。您应该使用前景选项直接运行mosquito(如果有)。
如果这是可能的话,像supervisord这样的东西将是一个不太理想的后备,能够观看后台守护进程。
如果这些都不起作用,您可以从以tail -f /dev/null
结尾的脚本运行命令,但这将是最糟糕的选择,因为您忽略了任何错误。
有用 !我找到了解决方案,它只需要在命令中添加“-C”并指定目录
这是一个很好的方法
ENTRYPOINT ["mosquitto", "-c", "/etc/mosquitto/mosquitto.conf"]
谢谢大家帮助我!