码头工人端口不可用

时间:2018-12-30 18:42:19

标签: spring-boot docker

我有一个尝试通过Docker运行的spring-config-sever项目。我可以从命令行运行它,其他服务和浏览器可以通过以下方式成功连接:

  

http://localhost:8980/aservice/dev

但是,如果我通过Docker运行它,则调用会失败。

我的配置服务器上有一个Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=build/libs/my-config-server-0.1.0.jar
ADD ${JAR_FILE} my-config-server-0.1.0.jar
EXPOSE 8980
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/my-config-server-0.1.0.jar"]

我通过以下方式构建:

  

docker build -t my-config-server

我通过以下方式运行它:

  

docker运行my-config-server -p 8980:8980

然后我确认它正在通过

运行
  

docker ps

CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES
1cecafdf99fe        my-config-server   "java -Djava.securit…"   14 seconds ago      Up 13 seconds       8980/tcp            suspicious_brahmagupta

当我通过Docker运行它时,浏览失败并显示“ ERR_CONNECTION_REFUSED”,而我的呼叫服务失败并显示:

  

无法找到PropertySource:GET请求的I / O错误   “ http://localhost:8980/aservice/dev”:连接被拒绝(连接   拒绝);

2 个答案:

答案 0 :(得分:1)

根据评论添加完整答案。

首先,您必须在图像名称之前指定-pdocker run -p 8980:8980 my-config-server

第二,仅使用主机端口配置localhost不会使您的my-service容器与其他容器通信。容器中的locahost位于自身(而非主机)内部。您将需要使用适当的docker networking model,以便两个容器都可以相互通信。

如果您使用的是Linux,则默认值为Bridge,因此可以将my-config-server容器ip docker inspect {containerIp-of-config-server}配置为配置服务器端点。

例如,如果您的my-config-server ip为172.17.0.2,则端点为-http://172.17.0.2:8980/

spring:
  cloud:
    config:
      uri: http://172.17.0.2:8980

只需遵循docker文档,就对网络的工作原理有更多了解。 https://docs.docker.com/network/network-tutorial-standalone/ https://docs.docker.com/v17.09/engine/userguide/networking/

如果要使用docker-compose启动两个容器,则可以使用服务名称链接两个容器。只需遵循Networking in Compose

答案 1 :(得分:0)

我可以想象该应用程序仅在本地主机(即127.0.0.1)上侦听。

您可能想尝试将属性server.address设置为0.0.0.0。 然后端口8980也应该在外部可用。