【问题标题】:rabbitmq-server -detached with non-root user is blockingrabbitmq-server - 与非 root 用户分离被阻塞
【发布时间】:2021-11-13 09:04:23
【问题描述】:

我在基于 centos:8 的 Docker 映像上运行 rabbitmq-server。

安装rabbitmq:

COPY yum/rabbitmq_erlang.repo /etc/yum.repos.d/rabbitmq_erlang.repo
RUN curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | bash && \
    yum -y install rabbitmq-server && \
    rabbitmq-plugins enable rabbitmq_management && \
    chmod -R 777 /var/lib/rabbitmq/mnesia

由于安全要求,我以自定义非 root 用户身份运行 Docker。

然后我的启动脚本运行

...
rabbitmq-server -detached
...

但是,此命令会阻止并且不会让我的脚本继续运行。

我知道我可以跑

rabbitmq-server &

但如果可能的话,我更喜欢作为守护进程正常运行。它似乎与以非 root 身份运行紧密结合,因为以 root 身份运行相同的图像可以正常工作。

命令行参考:https://www.rabbitmq.com/rabbitmq-server.8.html#OPTIONS

【问题讨论】:

  • 您是否在构建自定义rabbitmq 映像并且rabbitmq-server 是主要容器进程?或rabbitmq-server 进程将在一些主容器进程(具有 pid 1)之外运行
  • 它另外运行,这就是为什么我需要它作为守护进程运行
  • rabbitmq-server & 运行成功了吗?
  • @rok 是的,它运行成功

标签: docker rabbitmq centos dockerfile root


【解决方案1】:

rabbitmq-server -detached 是在后台运行rabbitmq 的方式。这些来自官方rabbitmq Dockerfile 的lines 可能会有所帮助。

但是,强烈建议不要在 Docker 容器中将 rabbitmq 和任何基础设施服务作为非 pid 1 运行,这违反了 docker 最佳实践。

给你几个理由:

  • 您需要在您的 Dockerfile 指令中仔细复制来自 Rabbitmq 官方 Dockerfile 的说明。
  • 当您的多服务容器收到 SIGTERM 信号时,其处理程序也必须调用 rabbitmq 的正常关闭。

您可能需要查看these docker 官方说明,了解如何尝试。

【讨论】:

  • 我完全理解他们的最佳实践和动机,但不明白为什么官方的后台运行方式在我的场景中不起作用,你认为这是rabbitmq中的错误吗?
猜你喜欢
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
相关资源
最近更新 更多