首页 文章

docker-compose:将docker镜像端口暴露给主机

提问于
浏览
0

我有这个docker-compose.yml片段,它旨在将Maven构建的Java中的SOAP endpoints 暴露给其他docker镜像(不包含在片段中,但它们可以工作):

mocksumma: image: openjdk:9-jdk ports: - "56808:56808" expose: [56808] volumes: - ./mocksumma/target/mocksumma-1.0-SNAPSHOT.jar:/mocksumma.jar #command: "sleep 10000000000" command: "java --add-modules java.se.ee -jar /mocksumma.jar 'http://localhost:56808/mediehub/search/services/SearchWS?wsdl'"

我也想从我的主机环境(Ubuntu 17.04,docker compose 1.8.1,docker 1.12.6)访问它,但是当访问http://localhost:56808时,我得到连接关闭或ERR_SOCKET_NOT_CONNECTED . 已确认Web服务在容器内部使用"telnet localhost 56808"进行响应 . 来自主机的Telnet立即返回已关闭的连接:

$ telnet localhost 56808 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.

我的理论是,由于某种原因,端口没有暴露或转发(端口)到主机,因为我要么忽略或误解了某些东西 .

建议?

2 回答

  • 2

    您应该将命令更改为

    command: "java --add-modules java.se.ee -jar /mocksumma.jar 'http://0.0.0.0:56808/mediehub/search/services/SearchWS?wsdl'"
    

    所以更新的撰写文件将是

    mocksumma:
        image: openjdk:9-jdk
        ports:
        - "56808:56808"
        expose: [56808]
        volumes:
        - ./mocksumma/target/mocksumma-1.0-SNAPSHOT.jar:/mocksumma.jar
        #command: "sleep 10000000000"
        command: "java --add-modules java.se.ee -jar /mocksumma.jar 'http://0.0.0.0:56808/mediehub/search/services/SearchWS?wsdl'"
    

    查看在容器内部工作的命令,我假设您的 mocksumma.jar 文件基于参数url绑定到网络接口 . 这意味着当您使用use url作为 http://0.0.0.0:56808/mediehub/search/services/SearchWS?wsdl 时,它会绑定到 localhost:56808 .

    现在容器内部 localhost 将指向容器的loopback接口,它只会在流量来自容器内部时才会回答 . 当您尝试映射此端口或另一个容器尝试在 56808 处到达此容器时,请求将在 eth0 或容器的类似接口上发出 .

    但你的绑定只是 localhost:56808 . 要解决此问题,您需要将其绑定到所有可用的接口,这可以通过绑定到 0.0.0.0:56808 来完成 . 0.0.0.0 是一个特殊地址,用于绑定所有可用接口

  • 0

    尝试使用此格式,如文档

    https://docs.docker.com/compose/compose-file/#expose

    mocksumma:
    image: openjdk:9-jdk
    ports:
    - "56808:56808"
    expose: 
    - "56808"
    volumes:
    - ./mocksumma/target/mocksumma-1.0-SNAPSHOT.jar:/mocksumma.jar
    #command: "sleep 10000000000"
    command: "java --add-modules java.se.ee -jar /mocksumma.jar 'http://localhost:56808/mediehub/search/services/SearchWS?wsdl'"
    

相关问题