【问题标题】:java.net.ConnectException: Connection refused (Connection refused): Docker + Spring bootjava.net.ConnectException:连接被拒绝(连接被拒绝):Docker + Spring boot
【发布时间】:2021-04-29 10:49:30
【问题描述】:

我有一个想要使用的外部 API,我正在为此目的使用 WebTarget

private final String target_url = "http://localhost:3000/models";
WebTarget target = client.target(target_url);
GenericType<List<Model>> genericType = new GenericType<List<Model>>() {};
List<Model> modelList = target.request(MediaType.APPLICATION_JSON_VALUE).get(genericType);
server.port=3001

没有 docker 也可以正常工作,我可以在 http://localhost:3000 访问外部 API

但是使用 Docker 我不能。

Dockerfile

FROM openjdk:8-jre-slim

COPY target/*.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

两个容器在同一个网络中

命令:

docker run --rm -p 3001:3001 --network external-api image-name:version

为了运行外部 API,我正在执行

docker run --rm -p 3000:3000 --network external-api external-api-image-name:version

我还在两个容器之间执行了 ping 操作

docker exec -ti 0d1e786b3f06 ping 19c5bb4ab4d5
PING 19c5bb4ab4d5 (172.27.0.2): 56 data bytes
64 bytes from 172.27.0.2: seq=0 ttl=64 time=0.232 ms
64 bytes from 172.27.0.2: seq=1 ttl=64 time=0.098 ms
64 bytes from 172.27.0.2: seq=2 ttl=64 time=0.169 ms
64 bytes from 172.27.0.2: seq=3 ttl=64 time=0.188 ms

错误:

java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_292]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_292]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_292]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_292]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_292]
    at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_292]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[na:1.8.0_292]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[na:1.8.0_292]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[na:1.8.0_292]
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:1.8.0_292]
    .
    .
    .

【问题讨论】:

  • 在docker中,你可以通过名字调用另一个容器。见this答案
  • 但是链接不是不鼓励并且在同一个网络中做同样的事情吗?
  • 我更新了帖子,我在两个容器之间添加了 ping
  • 你的容器在String target_url中无法访问localhost的问题。您应该在配置文件或属性中覆盖它。在 ping 中,你通过 id 来 ping 容器,而不是 localhost。
  • 你能举个例子吗?那将不胜感激。

标签: java spring-boot docker connection-refused


【解决方案1】:

你的容器不能访问String target_url中的localhost的问题。您应该在配置文件或属性中覆盖它。例如,您可以将您的 target_url 移动到类字段并对其进行注释 @Value(external.api.url) 并在 application.propeties 添加 external.api.url=your_container_name:port/uri

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 2021-06-27
    • 2023-03-21
    • 2021-06-24
    • 2015-05-18
    • 2018-06-10
    • 2017-08-10
    • 2021-04-24
    相关资源
    最近更新 更多