有没有办法在Docker上设置运行级别?

时间:2019-10-21 05:43:00

标签: docker rabbitmq dockerfile ubuntu-18.04

我想创建基于ubuntu的容器并在其中安装Rabbitmq

我尝试了docker run -dit ubuntu:18.04并在容器内手动安装Rabbitmq,以获得我的dockerfile的列表步骤。当我将dockerfile构建为docker映像时,它失败。并显示

Not creating home directory `/var/lib/rabbitmq'.
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Processing triggers for libc-bin (2.27-3ubuntu1) ...

Error: unable to connect to node rabbit@2e1645badb1d: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@2e1645badb1d]

rabbit@2e1645badb1d:
  * connected to epmd (port 4369) on 2e1645badb1d
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on 2e1645badb1d
  * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-01@2e1645badb1d'
- home dir: /var/lib/rabbitmq
- cookie hash: WYOXjiEogBIOb2jBVZzkPw==

这是我的dockerfile

FROM ubuntu:18.04


RUN apt-get update
RUN apt-get install rabbitmq-server -y
RUN service rabbitmq-server start
RUN rabbitmq-plugins enable rabbitmq_management
RUN rabbitmqctl start_app
RUN rabbitmqctl add_user test1 test1
RUN rabbitmqctl set_user_tags test1 administrator
RUN rabbitmqctl set_permissions -p / test1 ".*" ".*" ".*"

EXPOSE 25672
EXPOSE 5672
EXPOSE 15672
EXPOSE 4369

它应该正常运行,因为我放入dockerfile的步骤是相同的​​。

这里有人可以告诉我怎么做

1 个答案:

答案 0 :(得分:1)

简而言之:否。这些命令在您正在运行的容器中的工作方式与在build中的工作方式完全不同。

您执行的每个命令都会创建一个容器。然后,将在该容器中执行docker build命令(例如RUN),然后将其保存为映像。

保存图像后,

重要进程正在运行。后台/守护进程无法与docker配合使用-这是设计使然;) 这意味着,如果可能的话,请避免在dockerfile中运行“ service start”之类的命令(因为该命令不会持续到下一层/命令。

我建议您使用RabbitMQ https://hub.docker.com/_/rabbitmq

提供的官方图片

您可以在此处查看相关的Dockerfile的最新信息:https://github.com/docker-library/rabbitmq/blob/b8ca2ef2814cf35de476e763db94eb9706657f3c/3.8/ubuntu/Dockerfile

如果您仍然想使用Dockerfile,它需要看起来像这样(以保持进程运行)

FROM ubuntu:18.04

RUN apt-get update
RUN apt-get install rabbitmq-server -y
RUN service rabbitmq-server start && \
    rabbitmq-plugins enable rabbitmq_management && \
    rabbitmqctl start_app && \
    rabbitmqctl add_user test1 test1 && \
    rabbitmqctl set_user_tags test1 administrator && \
    rabbitmqctl set_permissions -p / test1 ".*" ".*" ".*" && \
    service rabbitmq-server stop

EXPOSE 4369 5671 5672 25672
CMD ["rabbitmq-server"]