我有一个基于IBM MQ自制镜像的dockerfile(我没有它的源代码,但它是一个Linux发行版)。
我想运行图像通过一些脚本,并保持它作为守护进程运行.
但是每次我尝试给mq传递一些命令,比如:echo "DEFINE QLOCAL(TEST_01.TEST.SOMETHING.DEV)" | runmqsc TEST
什么都没发生。
我已经尝试RUN echo "DEFINE QLOCAL(TEST_01.TEST.SOMETHING.DEV)" | runmqsc TEST
然后ENTRYPOINT ["echo \"DEFINE QLOCAL(TEST_01.TEST.SOMETHING.DEV)\" | runmqsc TEST"]
或者在我的docker-compose文件中:entrypoint: ["myscript.sh"]
where myscript contain the previous bash script还尝试根据我的第一个容器创建第二个容器:
mqsetup:
image: myimage
depends_on:
- mq
restart: "no"
entrypoint: [ "bash", "-c", "sleep 10 && echo \"DEFINE QLOCAL(TEST_01.TEST.SOMETHING.DEV)\" | runmqsc TEST"]
也尝试使用命令方法:
command:
- myscript.sh
什么都没用。
但是如果我执行到容器中:docker-compose exec mq /bin/bash
然后执行我的脚本:echo "DEFINE QLOCAL(TEST_01.TEST.SOMETHING.DEV)" | runmqsc TEST
我的队列被创建到我的队列管理器TEST.
老实说,我有点迷路了,我知道我的脚本是运行,因为我调试了一些触摸和回声,知道如果发生什么事...
一开始我认为粘贴脚本还为时过早,但事实并非如此(在请求启动脚本之前,我尝试用sleep 5m
等待5分钟,但没有运气,如果我尝试在exec模式下手动启动超过5分钟,它工作得很好.)
1条答案
按热度按时间euoag5mw1#
没有看到图像的来源,我只能猜测发生了什么。
默认情况下,映像将启动MQ,而您运行runmqsc的尝试会干扰它。在执行runmqsc命令之前,您需要确保该脚本可以运行,并且有时间启动其所有服务,这将花费超过2秒的时间。在执行runmqsc之后,您需要一个no-op指令来保持容器运行。
如果您正在使用
icr.io/ibm-messaging/mq:latest
,则可以按照@大卫迷宫提供的链接中的建议将.mqsc
添加到/etc/mqm
我认为你要做的是添加一些类似的东西:(其中
runmqdevserver
是当前映像运行的脚本。)你的DockerFile
顺便说一下,如果
runmqdevserver
是你的镜像运行的,那么你可以在运行runmqdevserver
之前按照大卫迷宫的评论将mqsc脚本复制到/etc/mqm。