spring-boot - 码头港口不可用
问题描述
我有一个试图通过 Docker 运行的 spring-config-sever 项目。我可以从命令行运行它,我的其他服务和浏览器通过以下方式成功连接:
但是,如果我通过 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 run my-config-server -p 8980:8980
然后我确认它正在运行
码头工人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:对“ http://localhost:8980/aservice/dev ”的 GET 请求出现 I/O 错误:连接被拒绝(连接被拒绝);
解决方案
根据评论添加完整答案。
首先,您必须-p
在图像名称之前指定。
docker run -p 8980:8980 my-config-server
.
其次,仅localhost
使用主机端口进行配置不会使您的 my-service 容器与其他容器通信。locahost
在容器内(不是主机)。您将需要使用适当的docker 网络模型,以便两个容器可以相互通信。
如果您使用的是 Linux,则默认设置是Bridge
您可以将 my-config-server 容器 ipdocker 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 启动两个容器,则可以使用服务名称链接两个容器。只需遵循Compose 中的 Networking 即可。
推荐阅读
- ios - 如何让我的 CollectionView 单元格从我的 TableView 中过滤数据?
- php - Laravel 记录没有变得那么动态
- reactjs - React Hook useEffect 依赖问题
- asp.net-mvc-4 - 在带有实体框架 6 的 Asp.net MVC 4 中使用多个数据上下文时如何处理连接
- odoo - 更改 Odoo v11 中所有报告的标题
- excel - 如何使用 ExecWB 命令将页面打印为 pdf
- c++ - 无穷大与 NAN 值
- java - 我无法从 Edittext 获取数据
- reactjs - 在 Reactjs 中的 EsLint “react / jsx-props-no-spreading”错误中禁用
- r - 在 sql server 中用 R 读取 .csv