如何从docker容器中的应用程序发布web服务?

如何从docker容器中的应用程序发布web服务?,docker,web-services,containers,port,java-web-start,Docker,Web Services,Containers,Port,Java Web Start,我有一个发布web服务的应用程序,我试图将其部署在docker容器上,但它不起作用。 我使用javax.jws中的@WebService和@WebMethod来声明我的服务,并使用 Endpoint.publish("http://localhost:8081/doctorservice", new DoctorServiceImplementation()); 我的Dockerfile的内容是 FROM openjdk:8 ADD targ

我有一个发布web服务的应用程序,我试图将其部署在docker容器上,但它不起作用。 我使用javax.jws中的@WebService和@WebMethod来声明我的服务,并使用

Endpoint.publish("http://localhost:8081/doctorservice",
                new DoctorServiceImplementation());
我的Dockerfile的内容是

FROM openjdk:8
ADD target/service-publisher.jar service-publisher.jar
EXPOSE 8081
ENTRYPOINT ["java","-jar","service-publisher.jar"]
我创建了docker图像

docker build -f Dockerfile -t webservice .
并运行它

docker run --name webservice -p 8081:8081 -d webservice 

容器运行,端口暴露,但当我尝试访问时http://localhost:8081/doctorservice?wsdl 从浏览器上看,它不起作用。

乍一看,您做的一切都是正确的,除了您试图访问的地址。 即使服务已公开,您也不在容器的“localhost”中,因此您应该使用容器的ip

TLDR,而不是尝试以下http://:8081/doctorservice?wsdl

检查此答案以获取容器的IP地址:


我找到了解决问题的方法:我不得不将服务发布到0.0.0.0而不是本地主机,所以我替换了

Endpoint.publish("http://localhost:8081/doctorservice",
                new DoctorServiceImplementation());


对于在docker容器中运行的应用程序

连接到浏览器时会收到什么错误消息?请参阅容器日志(
docker日志-f webservice
)-可能存在运行时异常…localhost拒绝连接错误连接拒绝您确定应用程序侦听8081吗?通常java应用程序服务器侦听端口808080,我必须使用8081,因为我有另一个使用8080的应用程序,我必须让它们同时运行。我仍然得到错误连接拒绝容器内部IP地址是无用的,除了在一个特定的Docker/主机操作系统配置上,然后只能从同一个物理主机。我不建议您尝试查找或直接使用它们。您也可以尝试使用127.0.0.1而不是0.0.0.0,并验证问题是否与主机名有关
Endpoint.publish("http://0.0.0.0:8081/doctorservice",
                new DoctorServiceImplementation());