' docker run'之间的不同行为并在容器

时间:2015-06-29 12:51:03

标签: docker rabbitmq

我正在尝试为RabbitMQ服务器构建映像,我遇到了以下问题。 在Dockerfile中,我有一行

  

" RUN /rabbitmq_server-3.5.3/sbin/rabbitmq-plugins启用rabbitmq_management"

这会导致构建过程在运行此命令时停止。 注释掉该行并稍后通过调用

运行具有该图像的容器
  

docker run myImage /rabbitmq_server-3.5.3/sbin/rabbitmq-plugins enable rabbitmq_management

出现相同的行为:容器不会停止,当检查容器时,我看到该命令永远运行。

通过调用

运行相同的图像时
  

docker run -it myImage / bin / bash

然后调用

  

/rabbitmq_server-3.5.3/sbin/rabbitmq-plugins启用rabbitmq_management

从容器内命令返回,一切正常。 有什么建议我做错了吗?

Dockerfile:

from privateRegistry:5000/base/rhel7
ADD rpms/ /rpms
RUN rpm -i /rpms/erlang-17.4-1.el6.x86_64.rpm
RUN mv /rpms/rabbitmq_server-3.5.3 /
RUN rm -rf /rpms
RUN /rabbitmq_server-3.5.3/sbin/rabbitmq-plugins enable rabbitmq_management
EXPOSE 5672
EXPOSE 15672
EXPOSE 25672

Docker构建在命令上停止以启用管理插件。

'运行'使用最后一个" RUN"构建图像时对图像进行命令注释掉:

docker run -it privateRegistry:5000/base/rabbit /rabbitmq_server-3.5.3/sbin/rabbitmq-plugins enable rabbitmq_management

无论是通过'<'使用-it还是在STDIN上发送输入?不返回,不产生任何输出。

在容器内部(以/ bin / bash作为命令启动)

/rabbitmq_server-3.5.3/sbin/rabbitmq-plugins enable rabbitmq_management

在容器内以交互方式生成输出并返回。

更新

我已经将问题进一步归结为从rabbitmq-plugins脚本调用erl的方式。原始脚本通过exec调用erl。在这种情况下,当使用' docker run'进行调用时,它会永远挂起。或者从Dockerfile中调用。删除' exec'并直接调用erl它通过' docker run'并从Dockerfile中。 然而,这似乎是针对erl的。我试过在脚本中通过exec调用其他命令,并没有观察到类似的问题。

1 个答案:

答案 0 :(得分:0)

该命令似乎正在尝试读取 stdin 上的内容。

检查并在这种情况下尝试使用< 和所需的输入重定向标准输入。像这样。

/rabbitmq_server-3.5.3/sbin/rabbitmq-plugins enable rabbitmq_management <<< y

/rabbitmq_server-3.5.3/sbin/rabbitmq-plugins enable rabbitmq_management <<< ""