如何 运行 使用 docker 支持 java 应用

How to run undertow java app with docker

我在 docker.

的应用程序中使用 undertow

我可以做到以下几点

  1. 创建 fat jar

  2. 创建 docker 图像
  3. 运行那个docker图片

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

  5. curl 我的 url 来自容器内部,curl localhost:8080/sample

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

我的撰写文件是

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

使用 8080 端口我无法访问 url。

我的Docker文件

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();

我在 google 中得到了一些 link 仍然无法正常工作

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

您 运行 您的 docker 形象如何? 你在发布端口吗?

docker run -p 8080:8080 ...

Related documentation

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

我把监听器改成

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

现在工作正常。

"The external IP is something completely different. So in summary you must set the host server for undertow as the Internal IP in the Iptables created by docker"

我错过了在我的参考资料中阅读这一行 link (http://lists.jboss.org/pipermail/undertow-dev/2014-October/000999.html)。

我老板发现了。