【问题标题】:Cannot start mosquitto as service on docker container无法在 docker 容器上启动 mosquitto 作为服务
【发布时间】:2019-05-30 00:41:34
【问题描述】:

我从 Dockerfile 创建了一个映像:

FROM debian:latest

RUN apt-get update && apt-get install -y \
mosquitto \
&& rm -rf /var/lib/apt/lists/*

# mosquitto setup
EXPOSE 1883
COPY config/broker/conf.d/ /etc/mosquitto/conf.d/
CMD mosquitto

这可行,但我想将 mosquitto 作为服务启动(是否推荐?)。但是当我用

替换最后一行时
CMD service mosquitto start

服务未启动且容器未运行(但我在创建映像期间未收到错误消息)

【问题讨论】:

    标签: docker dockerfile mosquitto docker-image


    【解决方案1】:

    在我看来,使用容器作为启动主机服务的一种方式似乎忽略了容器的意义。 “容器化”的应用程序应该可以随时启动/停止。如果您希望有一个长期运行的容器来提供您希望始终运行的服务,那么将--restart=always 选项添加到您的 docker run 命令中。这样当主机启动/重启,Docker 服务启动时,你的容器也会自动启动。关于容器化应用的注意事项列表是The 12 Factor App

    【讨论】:

      【解决方案2】:

      服务没有启动,我的容器没有运行

      检查 docker ps -a 以查看容器是否刚刚退出:要让您的容器运行,您需要确保其主进程保持在前台并且不会立即退出。

      尝试使用 docker 镜像 toke/docker-mosquitto 来查看从它运行的容器是否持续存在。

      【讨论】:

      • 这就是我想说的:在docker startdocker ps -a 之后,我的容器状态为exited。我想使用我自己的 Dockerfile,因为我做某事。更多的。上面的 Dockerfile 只是一个用于复制的最小 sn-p。
      • @Munchkin 这意味着您的主命令会立即启动和退出。尝试按照github.com/toke/docker-mosquitto 的方式配置您的图像。
      • 我刚刚查看了那个 repo。 CMD ["/usr/sbin/mosquitto", "-c", "/mqtt/config/mosquitto.conf"] 是否像 service mosquitto start 那样将 mosquitto 作为服务启动?
      • @Munchkin 不,CMDENTRYPOINT 的参数(参见stackoverflow.com/a/35453524/6309)。 ENTRYPOINT 正在调用 github.com/toke/docker-mosquitto/blob/master/…,这是一个简单的 exec 包装器。尝试一下,看看那个容器是否仍然存在,或者立即退出。
      • 刚刚试了一下:docker run 出现错误:docker-entrypoint.sh 未找到或不存在。另外,我不想挂载卷。现在我问自己,是否有必要将 mosquitto 作为容器内的服务启动,因为使用 CMD mosquitto,mosquitto 将在每个 docker start 上启动...
      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多