带有两个Spring Boot应用程序的Docker Compose得到“消息”:“针对GET请求的I / O错误为\“ http://127.0.0.1:8010 / ....:连接被拒绝”

时间:2019-09-18 08:30:18

标签: spring-boot docker docker-compose

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

应用一号

获取请求

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

响应:

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

app-two

获取请求

 - 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应用程序一个响应为OK,但应用程序两个返回错误:

"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)

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

1 个答案:

答案 0 :(得分:1)

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

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

您可以在https://docs.docker.com/compose/networking/上了解有关撰写网络的更多信息。