Java 无法使用容器将消息放入ibm mq中

Java 无法使用容器将消息放入ibm mq中,java,spring-boot,docker-compose,dockerfile,ibm-mq,Java,Spring Boot,Docker Compose,Dockerfile,Ibm Mq,我有两个docker容器,我正在使用docker compose构建它们。其中一个初始化IBMMQS,另一个公开rest端点(使用SpringBoot项目)以向由第一个容器设置的IBMMQ发送消息。当我把docker组装起来时,我得到了下面的错误 mock-service_1 | 2020-01-29 08:07:52.928 ERROR 1 --- [nio-7090-exec-2] c.j.ids.controller.AcarsController : JMSWMQ0018:

我有两个docker容器,我正在使用docker compose构建它们。其中一个初始化IBMMQS,另一个公开rest端点(使用SpringBoot项目)以向由第一个容器设置的IBMMQ发送消息。当我把docker组装起来时,我得到了下面的错误

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容器中的Localhost是spring容器。您需要容器的/主机ip,而不是将MQ连接的主机设置为localhost


如何操作取决于主机的平台,但它类似于
host.docker.internal
原因“2538”('MQRC\u host\u NOT\u AVAILABLE')
只是意味着您无法通过该“容器”可访问的网络访问指定的主机名和端口。我认为这与docker-compose.ybl文件中的端口公开有关。我无法得到确切的答案谢谢@chughts。我使用“docker inspect-f'{range.NetworkSettings.Networks}}{{.IPAddress}{{end}}'de3de72fdf6c”检查了容器的ip,并将ip替换为localhost,结果成功了。