Java 微服务可以';t到达docker compose中的配置服务

Java 微服务可以';t到达docker compose中的配置服务,java,spring-boot,docker,docker-compose,microservices,Java,Spring Boot,Docker,Docker Compose,Microservices,我目前有两个微服务: -服务-端口8080,此微服务尝试从其他微服务获取配置。 -config-端口8888,此微服务应提供配置 由于某些原因,我的服务无法从配置微服务获取配置。 我的配置微服务应该可以工作,因为我可以在我收到的机器上运行localhost:8888/service/default: {"name":"service","profiles":["default"],"label":null,"version":null,"state":null,"propertySources"

我目前有两个微服务:
-服务-端口8080,此微服务尝试从其他微服务获取配置。
-config-端口8888,此微服务应提供配置

由于某些原因,我的服务无法从配置微服务获取配置。
我的配置微服务应该可以工作,因为我可以在我收到的机器上运行localhost:8888/service/default:

{"name":"service","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"classpath:/shared/service.yml","source":{"server.port":8080,"spring.security.user.password":"admin"}},{"name":"classpath:/shared/service.yaml","source":{"server.port":8080,"spring.security.user.password":"admin"}}]}
收到错误

Docker-compose.yaml

version: '3.7'
services:
  config:
    container_name: config
    build: ./config
    ports:
      - 8888:8888

  service:
    container_name: service
    build: ./service
    ports:
      - 8080:8080
    depends_on:
      - config
服务文件:

FROM openjdk:8-jdk-alpine
ADD target/service.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8080
服务引导.yaml

spring:
  application:
    name: service
  cloud:
    config:
      uri: http://config:8888
      fail-fast: true
service.yaml(具有服务配置)

配置Dockerfile

FROM openjdk:8-jdk-alpine
ADD target/config.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8888
Config application.yaml

spring:
  application:
    name: config
  profiles:
    active: composite
  cloud:
    config:
      server:
        composite:
          - type: native
            search-locations: classpath:/shared

server:
  port: 8888
shared/service.yaml(具有服务配置)

有什么想法吗

我发现了一些类似的问题,虽然他们的URI只有问题,但我的设置是正确的。

当一项服务依赖于另一项服务时,在连接到该服务之前,必须确保后者已完全启动

在您的情况下,最可能的情况是,
config
已启动,但在运行
service
时尚未准备就绪(上下文已启动)。正如@Ganesh Karewad和@asolanki所指出的,解决方案是实现重新连接逻辑。另一个解决方案是确保
config
已初始化,并在运行
服务之前接受连接

您可以通过等待
config
应用程序启动的脚本来实现这一点。在另一种情况下,您可以使用命令配置
config
容器,并在启动它之后,等待它标记为正常。然后可以运行服务容器

讨论和讨论了类似问题


希望这能有所帮助。

您的2个微服务之间似乎有着很强的依赖性,这背后的原因是什么?您的确切意思是什么?我打算创建更多的服务,配置服务将为其提供配置。我的意思是,微服务应该是独立的,如果存在依赖项,则应该在另一层中解决。您提供了一个有效点。我想我并没有考虑太多。配置服务可能会出现一个初始延迟,到那个时候依赖服务已经尝试连接到它了。如果可能的话,您可以在容器安装到服务容器中之后通过ssh和ping配置容器并卷曲端点来调试它。如果不是,则是配置问题。您可以在compose文件中创建一个环境变量,并将该值设置为config service,然后使用它连接到config service。
FROM openjdk:8-jdk-alpine
ADD target/config.jar /app.jar
CMD [ "java", "-Xmx200m", "-jar", "/app.jar" ]
EXPOSE 8888
spring:
  application:
    name: config
  profiles:
    active: composite
  cloud:
    config:
      server:
        composite:
          - type: native
            search-locations: classpath:/shared

server:
  port: 8888
server:
  port: 8080

spring:
  security:
    user:
      password: admin # doesnt set since no connection