使用 Docker 部署时无法访问 Java SOAP 服务

问题描述 投票:0回答:1

我有这个简单的 Java SOAP 服务,它在本地计算机上运行良好。

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class EchoService {
    @WebMethod
    public String echo(@WebParam(name = "message") String message) {
        return message;
    }

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/echoservice", new EchoService());
        System.out.println("Service published at http://localhost:8080/echoservice");
    }
}

当我在本地启动此服务时,我可以通过 http://localhost:8080/echoservice 访问该服务

然后我尝试使用docker并部署容器化版本。这是我的 Dockerfile

FROM maven:3.8.4-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline

COPY src ./src
RUN mvn package

FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar ./app.jar
COPY --from=build /app/target/libs ./libs
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

启动容器后,我可以看到服务器正在运行,但无法再通过 http://localhost:8080/echoservice 访问。

这里应该出现什么问题? 这与 Docker 网络接口有关吗? 有办法解决这个问题吗?

java docker soap java-web-start
1个回答
0
投票

简短的回答,EXPOSE 只是一个文档工具,您需要通过使用 docker run -p 8080:8080 [image-name] 运行映像来实际将端口发布到您的主机

https://docs.docker.com/engine/reference/builder/#expose

EXPOSE指令实际上并不发布端口。它充当构建映像的人员和运行容器的人员之间的一种文档,有关要发布哪些端口。要在运行容器时发布端口,请在 docker run 上使用 -p 标志来发布和映射一个或多个端口,或使用 -P 标志来发布所有公开的端口并将它们映射到高位端口。

另请参阅答案https://stackoverflow.com/a/47594352/6845813

© www.soinside.com 2019 - 2024. All rights reserved.