【问题标题】:How to run undertow java app with docker如何使用 docker 运行 undertow java 应用程序
【发布时间】:2017-05-29 14:42:23
【问题描述】:

我在 docker 中使用 undertow。

我可以做到以下几点

  1. 创建胖罐

  2. 从中创建 docker 映像

  3. 运行该 docker 映像

  4. 在 8080 上列出并在 Docker 文件中添加 EXPOSE 8080

  5. curl my url from INSIDE the CONTAINER , curl localhost:8080/sample

我遇到了一些奇怪的问题,

我的撰写文件是

version: '2'
services:
  login:
    image: my-image
    ports:
     - "8080:8080"

使用 8080 端口我无法访问该 URL。

我的 Dockerfile

FROM openjdk:8-jre
COPY ./target/*-with-dependencies.jar /jars/service-jar.jar
EXPOSE 8080
CMD java  -cp /jars/service-jar.jar my.Main 

我的 Undertow 听众

Undertow server = Undertow.builder()
        .addHttpListener(8080, "localhost")
        .setHandler(path)
        .build();

我在谷歌有一些链接仍然无法使其工作

http://lists.jboss.org/pipermail/undertow-dev/2014-October/000999.html

【问题讨论】:

    标签: java curl docker undertow


    【解决方案1】:

    通过侦听 docker 容器 ip 地址的 ip 解决了这个问题。

    我把我的听众改成了

    Undertow server = Undertow.builder()
            .addHttpListener(8080, InetAddress.getLocalHost().getHostAddress())
            .setHandler(path)
            .build();
    

    现在它工作正常。

    “外部IP是完全不同的东西。所以总的来说你 必须将 undertow 的主机服务器设置为内部 IP docker创建的iptables”

    我错过了在我的参考链接 (http://lists.jboss.org/pipermail/undertow-dev/2014-October/000999.html) 中阅读此行。

    我的老板发现了。

    【讨论】:

    • 请记住,如果您为此容器使用多个 docker-networks,则会遇到问题。在这种情况下,您应该使用.addHttpListener(8080,"0.0.0.0"),它基本上说:“监听所有 ip 地址”
    • @ShrimpPhaser,谢谢你的建议。这也有效。
    【解决方案2】:

    你是如何运行你的 docker 镜像的? 你在发布端口吗?

    docker run -p 8080:8080 ...
    

    Related documentation

    【讨论】:

      猜你喜欢
      • 2019-05-12
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多