【问题标题】:docker container exits immediately after run [mosquitto broken container]docker 容器在运行后立即退出 [mosquitto broken container]
【发布时间】:2019-04-05 14:51:36
【问题描述】:

你好,我遇到了 docker 问题,最近我制作了 dockerfile 来创建“mosquitto-mqtt”的图像,以制作我自己的带有 ssl 保护的损坏的 mqtt。我构建 dockerfile 一切都很好,我没有问题,但是如果我使用“docker run -itd --name broken ce69ee4b2f4e”运行一个新容器,容器会自动运行并退出,如果检查日志一切正常“[好的。]正在启动网络守护进程:: mosquitto."。我不知道为什么?检查我的码头文件。我需要帮助来解决它,谢谢你

#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

【问题讨论】:

  • 你检查日志了吗?您是否尝试过以交互方式进入容器并手动执行入口点?
  • 是的,我检查了日志,他打印“[ ok .] Starting network daemon:: mosquitto.”如果我尝试进入容器,他会打印“[ok .] Starting network daemon:: mosquitto。”并自动退出

标签: linux docker debian containers mosquitto


【解决方案1】:

容器是一个进程的包装器,当该进程退出时,容器也会退出。在这种情况下:

ENTRYPOINT ["/etc/init.d/mosquitto", "start"]

该进程是/etc/init.d/mosquitto,它几乎肯定会运行,在后台生成一个守护进程,然后退出(对于 init.d 中的任何内容都是标准的)。如果可用,您应该使用前台选项直接运行蚊子。

如果可能的话,像 supervisord 这样的东西将不是最佳的后备,具有监视后台守护程序的能力。

如果这些都不起作用,您可以从以 tail -f /dev/null 结尾的脚本运行命令,但这是最糟糕的选择,因为您会忽略任何错误。

【讨论】:

  • 谢谢@BMitch,它尝试选项1,我去了“Eclipse-mosquitto”的官方github存储库的Dockerfile,我找到了运行容器而不自动退出的解决方案,它只是添加-c在 mosquitto 命令上并指定配置文件 "ENTRYPOINT ["mosquitto", "-c", "/etc/mosquitto/mosquitto.conf"]"。谢谢
  • 请注意 /etc/init.d/mosquittomosquitto 不是同一个命令,在这种情况下这是一件好事。
  • 是的!好吧,我在构建 dockerfile 时发现了它
【解决方案2】:

它有效!我找到了解决方案,它只需要在命令上添加“-C”并指定目录

这是个好方法

ENTRYPOINT ["mosquitto", "-c", "/etc/mosquitto/mosquitto.conf"]

感谢大家帮助我!

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2019-09-26
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多