如何从 docker 容器内的应用程序发布 Web 服务?
How to publish a web service from an application inside a docker container?
我有一个发布 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
容器 运行s 和端口已公开,但当我尝试从浏览器访问 http://localhost:8081/doctorservice?wsdl 时,它不起作用。
乍一看,除了您尝试到达的地址外,您所做的一切都是正确的。
即使服务暴露,你也不在容器的 "localhost" 中,因此你应该使用容器的 ip。
TLDR,而不是 http://localhost:8081/doctorservice?wsdl 试试这个 http://<_CONTAINER_IP_ADDRESS_>:8081/doctorservice?wsdl
检查此答案以获取容器的 IP 地址:
How to get a Docker container's IP address from the host
我找到了问题的解决方案:我必须将服务发布到 0.0.0.0 而不是本地主机,所以我替换了
Endpoint.publish("http://localhost:8081/doctorservice",
new DoctorServiceImplementation());
和
Endpoint.publish("http://0.0.0.0:8081/doctorservice",
new DoctorServiceImplementation());
对于 docker 容器内的应用 运行
我有一个发布 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
容器 运行s 和端口已公开,但当我尝试从浏览器访问 http://localhost:8081/doctorservice?wsdl 时,它不起作用。
乍一看,除了您尝试到达的地址外,您所做的一切都是正确的。 即使服务暴露,你也不在容器的 "localhost" 中,因此你应该使用容器的 ip。
TLDR,而不是 http://localhost:8081/doctorservice?wsdl 试试这个 http://<_CONTAINER_IP_ADDRESS_>:8081/doctorservice?wsdl
检查此答案以获取容器的 IP 地址:
How to get a Docker container's IP address from the host
我找到了问题的解决方案:我必须将服务发布到 0.0.0.0 而不是本地主机,所以我替换了
Endpoint.publish("http://localhost:8081/doctorservice",
new DoctorServiceImplementation());
和
Endpoint.publish("http://0.0.0.0:8081/doctorservice",
new DoctorServiceImplementation());
对于 docker 容器内的应用 运行