如何使用docker运行undertow java应用程序

如何使用docker运行undertow java应用程序,java,curl,docker,undertow,Java,Curl,Docker,Undertow,我在docker的应用程序中使用undertow 我能做到以下几点 创建脂肪罐 从中创建docker图像 运行docker映像 在8080上列出并在Docker文件中添加了EXPOSE 8080 从容器内部卷曲我的url,卷曲localhost:8080/sample 我面临着一些奇怪的问题 我的写作文件是 version: '2' services: login: image: my-image ports: - "8080:8080" 使用8080端口,我无法

我在docker的应用程序中使用undertow

我能做到以下几点

  • 创建脂肪罐

  • 从中创建docker图像

  • 运行docker映像

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

  • 从容器内部卷曲我的url,卷曲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 server = Undertow.builder()
            .addHttpListener(8080, "localhost")
            .setHandler(path)
            .build();
    
    我在谷歌上找到了一些链接,但仍然无法正常工作


    你是如何运行docker映像的? 您是发布端口吗

    docker run -p 8080:8080 ...
    

    通过将ip侦听到docker容器ip地址,解决了此问题

    我把我的听众改为

    Undertow server = Undertow.builder()
            .addHttpListener(8080, InetAddress.getLocalHost().getHostAddress())
            .setHandler(path)
            .build();
    
    现在它运行良好

    “外部IP是完全不同的。因此,总之,您 必须将undertow的主机服务器设置为中的内部IP “docker创建的Iptables”

    我没有读到参考链接()中的这一行


    我老板发现了

    但是请记住,如果您为此容器使用多个docker网络,您将遇到问题。在这个场景中,您应该使用
    .addHttpListener(8080,“0.0.0.0”)
    ,它的基本意思是:“监听所有ip地址”@ShrimpPhaser,谢谢您的建议。这也行得通。