我有两个小的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)
有什么想法或建议吗? 谢谢
答案 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/上了解有关撰写网络的更多信息。