Docker 使用两个 Spring 启动应用程序撰写 获取"消息":"获取 http://127.0.0.1:8010/ 的 GET 请求出现 I/O 错误....:连接被拒绝"



我有两个小型的 Spring Boot 应用程序,它公开了一个 rest API:

应用一

获取请求

- http://localhost:8010/api/stock/AAPL

响应:

{
"name": "AAPL",
"value": 219.9
}

应用二

获取请求

- http://localhost:8080/api/trade/APPL/buy/10

响应

{
"id": 1,
"stock": {
"name": "APPL",
"value": 219.9
},
"quantity": 10,
"total": 2199.0
}

当我在没有 Docker 的情况下在本地主机上运行这两个应用程序时,我从两个 API 都得到了正确的响应。

当我使用 Docker Compose 运行应用程序时,第一个 API 应用程序一响应正常,但应用程序二返回错误:

"message": "I/O error on GET request for "http://127.0.0.1:8010/api/stock/APPL": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)",
"path": "/api/trade/APPL/buy/10"

这是我的docker-compose.yml配置文件:

version: "3.7"
services:
app-one:
image: ibercode/app-one
ports:
- "8010:8010"
expose:
- "8010"
app-two:
build: .
ports:
- "8080:8080"
depends_on:
- app-one      
environment:
- APP_ONE_URI=http://127.0.0.1:8010/api/stock/

这是我运行命令后的输出docker-compose up

$ docker-compose up
Starting app-two_app-one_1 ... done
Starting app-two_app-two_1 ... done
Attaching to app-two_app-one_1, app-two_app-two_1
app-one_1  |
app-one_1  |   .   ____          _            __ _ _
app-one_1  |  /\ / ___'_ __ _ _(_)_ __  __ _    
app-one_1  | ( ( )___ | '_ | '_| | '_ / _` |    
app-one_1  |  \/  ___)| |_)| | | | | || (_| |  ) ) ) )
app-one_1  |   '  |____| .__|_| |_|_| |___, | / / / /
app-one_1  |  =========|_|==============|___/=/_/_/_/
app-one_1  |  :: Spring Boot ::        (v2.1.8.RELEASE)
app-one_1  |
app-one_1  | 2019-09-18 08:28:07.287  INFO 1 --- [           main] com.ibercode.AppOneApplication           : Starting AppOneApplication vlatest on a090eb18a661 with PID 1 (/app.jar started by root in /)
app-one_1  | 2019-09-18 08:28:07.291  INFO 1 --- [           main] com.ibercode.AppOneApplication           : No active profile set, falling back to default profiles: default
app-two_1  |
app-two_1  |   .   ____          _            __ _ _
app-two_1  |  /\ / ___'_ __ _ _(_)_ __  __ _    
app-two_1  | ( ( )___ | '_ | '_| | '_ / _` |    
app-two_1  |  \/  ___)| |_)| | | | | || (_| |  ) ) ) )
app-two_1  |   '  |____| .__|_| |_|_| |___, | / / / /
app-two_1  |  =========|_|==============|___/=/_/_/_/
app-two_1  |  :: Spring Boot ::        (v2.1.8.RELEASE)
app-two_1  |
app-two_1  | 2019-09-18 08:28:08.308  INFO 1 --- [           main] com.ibercode.AppTwoApplication           : Starting AppTwoApplication vlatest on 973897f9ea8d with PID 1 (/app.jar started by root in /)
app-two_1  | 2019-09-18 08:28:08.325  INFO 1 --- [           main] com.ibercode.AppTwoApplication           : No active profile set, falling back to default profiles: default
app-one_1  | 2019-09-18 08:28:10.448  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8010 (http)
app-one_1  | 2019-09-18 08:28:10.536  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
app-one_1  | 2019-09-18 08:28:10.537  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
app-one_1  | 2019-09-18 08:28:10.731  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
app-one_1  | 2019-09-18 08:28:10.744  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3313 ms
app-one_1  | 2019-09-18 08:28:11.283  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
app-two_1  | 2019-09-18 08:28:11.488  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
app-two_1  | 2019-09-18 08:28:11.588  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
app-two_1  | 2019-09-18 08:28:11.588  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
app-one_1  | 2019-09-18 08:28:11.701  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8010 (http) with context path ''
app-one_1  | 2019-09-18 08:28:11.705  INFO 1 --- [           main] com.ibercode.AppOneApplication           : Started AppOneApplication in 5.488 seconds (JVM running for 6.129)
app-two_1  | 2019-09-18 08:28:11.797  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
app-two_1  | 2019-09-18 08:28:11.797  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3281 ms
app-two_1  | 2019-09-18 08:28:12.077  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
app-two_1  | 2019-09-18 08:28:12.249  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
app-two_1  | 2019-09-18 08:28:12.251  INFO 1 --- [           main] com.ibercode.AppTwoApplication           : Started AppTwoApplication in 5.016 seconds (JVM running for 5.955)

有什么想法或建议吗? 谢谢

您似乎正在尝试使用 URL http://127.0.0.1:8010/api/stock/APPL 从应用程序 2 访问应用程序 1。但是,无法从另一个容器访问 127.0.0.1 下的其他容器。

您可以按服务名称访问撰写文件中的其他服务。这意味着,您需要配置您的 app-2 应用程序以查找主机app-one,即APP_ONE_URI=http://app-one/api/stock/.

您可以在此处阅读有关撰写网络的详细信息 https://docs.docker.com/compose/networking/。

最新更新