gpt4 book ai didi

java - 使用 docker-compose 时无法访问 docker 容器内的 spring-boot Rest-endpoint

转载 作者:行者123 更新时间:2023-11-30 05:34:42 24 4
gpt4 key购买 nike

我正在使用 docker-compose 在 docker 内设置 spring-boot 应用程序,并且需要从本地主机的端口 8080 上的一个应用程序访问休息端点。以下端点在本地启动时工作正常http://localhost:8080/central/products

我使用的是 ubuntu 19.10 并运行 docker 版本 18.09.5。当我为 docker 设置一个简单的 spring-boot 应用程序时,如 https://spring.io/guides/gs/spring-boot-docker/ 上所述,一切都按预期进行,我可以到达 http://localhost:8080/ 上的端点。但是,当我使用 docker-compose 启动更多服务时,我无法从本地主机到达此端点。

用于构建 spring-boot 应用程序的 Dockerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","sample.EfridgeCentralApplication"]

docker-compose.yml 文件似乎导致了问题:

version: '3.7'
services:
central-london:
image: demo/efridge-central:latest
container_name: central-london
ports:
- 8080:8080
environment:
- SERVER_PORT=8080
- SPRING_PROFILES_ACTIVE=dev
- SPRING_DATA_MONGODB_HOST=mongo-central
- SPRING_DATA_MONGODB_PORT=27017
- APP_RABBIT_HOSTNAME=rabbit-efridge

factory-usa:
image: demo/efridge-factory:latest
container_name: factory-usa
ports:
- 8081:8081
environment:
- SERVER_PORT=8081
- SPRING_PROFILES_ACTIVE=usa
- SPRING_DATA_MONGODB_HOST=mongo-usa
- SPRING_DATA_MONGODB_PORT=27017
- APP_RABBIT_HOSTNAME=rabbit-efridge

factory-china:
image: demo/efridge-factory:latest
container_name: factory-china
ports:
- 8082:8082
environment:
- SERVER_PORT=8082
- SPRING_PROFILES_ACTIVE=china
- SPRING_DATA_MONGODB_HOST=mongo-china
- SPRING_DATA_MONGODB_PORT=27017
- APP_RABBIT_HOSTNAME=rabbit-efridge

mongo-central:
image: mongo:latest
container_name: mongo-central
hostname: mongo-central
ports:
- 27017:27017

mongo-usa:
image: mongo:latest
container_name: mongo-usa
hostname: mongo-usa
ports:
- 27018:27017

mongo-china:
image: mongo:latest
container_name: mongo-china
hostname: mongo-china
ports:
- 27019:27017

rabbit-efridge:
image: rabbitmq:3-management
container_name: rabbit-efridge
hostname: rabbit-efridge
ports:
- 15672:15672
- 5672:5672

docker 检查的输出:

"NetworkSettings": {
"Bridge": "",
"SandboxID": "b91760f810a656e382d702dd408afe3c5ffcdf4c0cd15ea8550150867ac038cc",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"8080/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
}
]
}

来自 spring-boot 的日志

2019-07-03 11:54:57.654  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-07-03 11:54:57.803 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-07-03 11:54:57.804 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-07-03 11:54:58.149 INFO 1 --- [ main] o.a.c.c.C.[.[localhost].[/central] : Initializing Spring embedded WebApplicationContext
2019-07-03 11:54:58.150 INFO 1 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 6950 ms
2019-07-03 11:54:59.810 INFO 1 --- [ main] org.mongodb.driver.cluster : Cluster created with settings {hosts=[mongo-central:27017], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2019-07-03 11:54:59.810 INFO 1 --- [ main] org.mongodb.driver.cluster : Adding discovered server mongo-central:27017 to client view of cluster
2019-07-03 11:55:00.256 INFO 1 --- [o-central:27017] org.mongodb.driver.connection : Opened connection [connectionId{localValue:1, serverValue:11}] to mongo-central:27017

工作的 spring-boot 容器和不工作的 dockerspect 的输出看起来几乎相同。我还可以通过 mongo 客户端访问rabbitmq Web 界面和MongoDB。唯一不起作用的是通过 http://localhost:8080/central/products 访问其余端点。

最佳答案

您的 Dockerfile 缺少 EXPOSE 语句,因此没有端口暴露给外部世界。

EXPOSE 8080 添加到 Dockerfile 底部后,即可从容器外部访问您的应用程序。

关于java - 使用 docker-compose 时无法访问 docker 容器内的 spring-boot Rest-endpoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56869987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com