我正在尝试在容器中运行我的 Spring 应用程序,
目前,我有 2 个容器,其中 1 个运行我的 Spring Config Server,运行在端口 8888 上,如果我打开浏览器,我确实可以获取属性,这没什么问题(我认为),
第二个容器是 Spring Eureka Discovery Server,运行在端口 8787 上,但是当我在 maven 中构建项目,然后构建映像并运行它时,我在日志中收到以下错误:
2025-04-07 12:03:56 2025-04-07T18:03:56.388Z INFO 1 --- [app-seven-eureka] [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://10.1.10.220:8888
2025-04-07 12:03:59 2025-04-07T18:03:59.853Z INFO 1 --- [app-seven-eureka] [ main] c.c.c.ConfigServicePropertySourceLocator : Exception on Url - http://10.1.10.220:8888:org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://10.1.10.220:8888/app-seven-eureka/default": No route to host. Will be trying the next url if available
2025-04-07 12:03:59 2025-04-07T18:03:59.853Z WARN 1 --- [app-seven-eureka] [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://10.1.10.220:8888/app-seven-eureka/default": No route to host
2025-04-07 12:03:59 2025-04-07T18:03:59.857Z INFO 1 --- [app-seven-eureka] [ main] .s.AppMSEurekaApplication : No active profile set, falling back to 1 default profile: "default"
并且应用程序没有响应并且引发了一些其他错误,正如我所看到的,那是因为它没有从配置服务器加载配置参数......
从 Eclipse 启动第二个应用程序或在终端中运行 jar 不会引发任何错误,服务器启动正常并在正确的端口响应,这是在容器内部时,
这是我的dockerfile:
FROM openjdk:25-oraclelinux8
WORKDIR /app
COPY target/app-seven-eureka-1.0.0.jar /app/app7.jar
EXPOSE 8787
ENTRYPOINT ["java", "-jar", "/app/app7.jar"]
我确实按照这个问题的建议将我的 application.properties 更改为 bootstrap.properties,但没有效果:Spring Cloud Config Client: Fetching config from wrong server
我运行容器的命令是:docker run -p 8787:8787 app-seven-eureka
那么,我是不是漏掉了什么?创建容器时是否需要传递其他参数?或者可能存在什么问题?
解决方案:
切换到 docker composer 来创建容器并在它们之间创建网络:
services:
service-config:
container_name: app-seven-config
networks:
- app-seven-network
service-eureka:
container_name: app-seven-eureka
networks:
- app-seven-network
extra_hosts:
- "docker.internal:127.0.0.1"
networks:
app-seven-network:
driver: bridge
你的容器是否共享同一个网络?根据你提供的运行命令来看,答案很可能是否定的。
来自docker文档https://docs.docker.com/engine/network/
有了它,你需要先创建一个网络,然后运行你的容器
或者,您可以使用docker compose来管理容器