无法使用容器将消息放入 ibm mq
Unable to put message in ibm mq using container
我有两个 docker 容器,我正在使用 docker-compose 构建它们。其中一个初始化 ibm mqs,另一个是公开其余端点(使用 SpringBoot 项目)以将消息发送到由第一个容器设置的 ibm mq。当我得到 docker-compose up 时,我收到以下错误
mock-service_1 | 2020-01-29 08:07:52.928 ERROR 1 --- [nio-7090-exec-2] c.j.ids.controller.AcarsController : JMSWMQ0018: Failed to connect to queue manager 'QM1' with connection mode 'Client' and host name 'localhost(1414)'.
acars-mock-service_1 | com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0018: Failed to connect to queue manager 'QM1' with connection mode 'Client' and host name 'localhost(1414)'. Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2538' ('MQRC_HOST_NOT_AVAILABLE').
mock-service_1 | at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
如果我从我的 IDE 本地 运行 SpringBoot 应用程序而没有任何错误,我可以将消息放入同一个队列中。不确定使用单独容器的问题是什么。我的 DockerFile 看起来像这样
FROM ibmcom/mq
USER root
RUN useradd ibm-mq -G mqm && \
echo ibm-mq:passw0rd | chpasswd
USER mqm
COPY config.mqsc /etc/mqm/
EXPOSE 9443 1414
和config.mqsc
ALTER QMGR CHLAUTH(DISABLED)
docker-compose.yml
version: '3.3'
services:
ibm-mq-mock:
build:
context: ../mock-service/ibm-mq
dockerfile: Dockerfile
ports:
- 9443:9443
- 1414:1414
environment:
LICENSE: accept
MQ_QMGR_NAME: QM1
mock-service:
build:
context: ../mock-service
ports:
- 7090:7090
depends_on:
- ibm-mq-mock
environment:
MQ_QMGR_NAME: QM1
CHANNEL: DEV.ADMIN.SVRCONN
IBM_MQ_HOST: localhost
IBM_MQ_PORT: 1414
IBM_MQ_USERID: admin
IBM_MQ_PASSWORD: passw0rd
IBM_MQ_QUEUE: DEV.QUEUE.1
LOG_LEVEL: INFO
PROFILE: test
您的 spring 容器内的本地主机是您的 spring 容器。您不需要为您的 MQ 连接将主机设置为 localhost,而是需要容器的/主机 ip。
如何操作取决于主机的平台,但它会类似于 host.docker.internal
我有两个 docker 容器,我正在使用 docker-compose 构建它们。其中一个初始化 ibm mqs,另一个是公开其余端点(使用 SpringBoot 项目)以将消息发送到由第一个容器设置的 ibm mq。当我得到 docker-compose up 时,我收到以下错误
mock-service_1 | 2020-01-29 08:07:52.928 ERROR 1 --- [nio-7090-exec-2] c.j.ids.controller.AcarsController : JMSWMQ0018: Failed to connect to queue manager 'QM1' with connection mode 'Client' and host name 'localhost(1414)'.
acars-mock-service_1 | com.ibm.msg.client.jms.DetailedIllegalStateException: JMSWMQ0018: Failed to connect to queue manager 'QM1' with connection mode 'Client' and host name 'localhost(1414)'. Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2538' ('MQRC_HOST_NOT_AVAILABLE').
mock-service_1 | at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
如果我从我的 IDE 本地 运行 SpringBoot 应用程序而没有任何错误,我可以将消息放入同一个队列中。不确定使用单独容器的问题是什么。我的 DockerFile 看起来像这样
FROM ibmcom/mq
USER root
RUN useradd ibm-mq -G mqm && \
echo ibm-mq:passw0rd | chpasswd
USER mqm
COPY config.mqsc /etc/mqm/
EXPOSE 9443 1414
和config.mqsc
ALTER QMGR CHLAUTH(DISABLED)
docker-compose.yml
version: '3.3'
services:
ibm-mq-mock:
build:
context: ../mock-service/ibm-mq
dockerfile: Dockerfile
ports:
- 9443:9443
- 1414:1414
environment:
LICENSE: accept
MQ_QMGR_NAME: QM1
mock-service:
build:
context: ../mock-service
ports:
- 7090:7090
depends_on:
- ibm-mq-mock
environment:
MQ_QMGR_NAME: QM1
CHANNEL: DEV.ADMIN.SVRCONN
IBM_MQ_HOST: localhost
IBM_MQ_PORT: 1414
IBM_MQ_USERID: admin
IBM_MQ_PASSWORD: passw0rd
IBM_MQ_QUEUE: DEV.QUEUE.1
LOG_LEVEL: INFO
PROFILE: test
您的 spring 容器内的本地主机是您的 spring 容器。您不需要为您的 MQ 连接将主机设置为 localhost,而是需要容器的/主机 ip。
如何操作取决于主机的平台,但它会类似于 host.docker.internal