我正在尝试为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调用其他命令,并没有观察到类似的问题。
答案 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 <<< ""