shell 在Docker中,启动容器时无法执行脚本来管理IBM MQ队列

n9vozmp4  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(149)

我有一个基于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分钟,它工作得很好.)

euoag5mw

euoag5mw1#

没有看到图像的来源,我只能猜测发生了什么。
默认情况下,映像将启动MQ,而您运行runmqsc的尝试会干扰它。在执行runmqsc命令之前,您需要确保该脚本可以运行,并且有时间启动其所有服务,这将花费超过2秒的时间。在执行runmqsc之后,您需要一个no-op指令来保持容器运行。
如果您正在使用icr.io/ibm-messaging/mq:latest,则可以按照@大卫迷宫提供的链接中的建议将.mqsc添加到/etc/mqm
我认为你要做的是添加一些类似的东西:(其中runmqdevserver是当前映像运行的脚本。)

entrypoint: ["/bin/bash", "-c"]
command:
- |
     runmqdevserver
     sleep 120  
     echo \"DEFINE QLOCAL(TEST_01.TEST.SOMETHING.DEV)\" | runmqsc TEST
     tail -f /dev/null

你的DockerFile
顺便说一下,如果runmqdevserver是你的镜像运行的,那么你可以在运行runmqdevserver之前按照大卫迷宫的评论将mqsc脚本复制到/etc/mqm。

相关问题