Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Docker容器中的Spring云配置不可访问_Spring Boot_Docker_Docker Compose_Netflix Eureka_Spring Cloud Config - Fatal编程技术网

Spring boot Docker容器中的Spring云配置不可访问

Spring boot Docker容器中的Spring云配置不可访问,spring-boot,docker,docker-compose,netflix-eureka,spring-cloud-config,Spring Boot,Docker,Docker Compose,Netflix Eureka,Spring Cloud Config,我有一个相对简单的设置。一个Spring可以配置服务器,一个Spring云Eureka服务器。(我将Eureka服务器称为“在我的配置中到处发现…”配置服务器使用Git存储库来查找适当的配置 所有东西都在Docker容器中。我使用docker compose来构建我的服务。网关服务器应等待配置服务器启动。我将进一步提供文件的源代码 因此,当我构建并启动容器时,发现(Eureka)服务器不想出现。它存在一个异常。它真的很长,所以我在这里添加了最重要的部分: 019-01-27 23:52:17,4

我有一个相对简单的设置。一个Spring可以配置服务器,一个Spring云Eureka服务器。(我将Eureka服务器称为“在我的配置中到处发现…”配置服务器使用Git存储库来查找适当的配置

所有东西都在Docker容器中。我使用docker compose来构建我的服务。网关服务器应等待配置服务器启动。我将进一步提供文件的源代码

因此,当我构建并启动容器时,发现(Eureka)服务器不想出现。它存在一个异常。它真的很长,所以我在这里添加了最重要的部分:

019-01-27 23:52:17,494 [INFO  ] o.s.c.c.c.ConfigServicePropertySourceLocator.getRemoteEnvironment [main] – Fetching config from server at : http://tao-elszamolas-config:9001
2019-01-27 23:52:17,898 [INFO  ] o.s.c.c.c.ConfigServicePropertySourceLocator.getRemoteEnvironment [main] – Connect Timeout Exception on Url - http://tao-elszamolas-config:9001. Will be trying the next url if available
2019-01-27 23:52:17,902 [ERROR ] o.s.b.SpringApplication.reportFailure [main] – Application run failed
java.lang.IllegalStateException: Could not locate PropertySource and the fail fast property is set, failing
... Something...Something
Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://tao-elszamolas-config:9001/discovery-server/prod": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:743) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.getRemoteEnvironment(ConfigServicePropertySourceLocator.java:218) ~[spring-cloud-config-client-2.1.0.RC3.jar!/:2.1.0.RC3]
    at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.locate(ConfigServicePropertySourceLocator.java:96) ~[spring-cloud-config-client-2.1.0.RC3.jar!/:2.1.0.RC3]
    ... 15 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[?:?]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[?:?]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[?:?]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[?:?]
    at java.net.Socket.connect(Socket.java:591) ~[?:?]
    at java.net.Socket.connect(Socket.java:540) ~[?:?]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:182) ~[?:?]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:474) ~[?:?]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:569) ~[?:?]
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[?:?]
    at sun.net.www.http.HttpClient.New(HttpClient.java:341) ~[?:?]
    at sun.net.www.http.HttpClient.New(HttpClient.java:362) ~[?:?]
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1242) ~[?:?]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1181) ~[?:?]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1075) ~[?:?]
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1009) ~[?:?]
    at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:734) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578) ~[spring-web-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
    at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.getRemoteEnvironment(ConfigServicePropertySourceLocator.java:218) ~[spring-cloud-config-client-2.1.0.RC3.jar!/:2.1.0.RC3]
    at org.springframework.cloud.config.client.ConfigServicePropertySourceLocator.locate(ConfigServicePropertySourceLocator.java:96) ~[spring-cloud-config-client-2.1.0.RC3.jar!/:2.1.0.RC3]
    ... 15 more
配置服务器的Dockerfile:

 FROM openjdk:11-jdk-slim
 MAINTAINER BeszterceKK
 COPY ./tao-elszamolas-config.jar /usr/src/taoelszamolas/tao-elszamolas-config.jar
 WORKDIR /var/log/tao-elszamolas
 WORKDIR /usr/src/taoelszamolas
 ENV SPRING_PROFILES_ACTIVE prod
 EXPOSE 9001
 ENTRYPOINT ["java", "-DlogFileLocation=/var/log/tao-elszamolas", "-jar", "tao-elszamolas-config.jar"]
配置服务器的application.yml

server:
  port: 9001

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/something/something
          username: something
          password: something
          skip-ssl-validation: true
  security:
    user:
      name: something
      password: something

eureka:  
  client:
    serviceUrl:
      defaultZone: http://something:something@tao-elszamolas-discovery:9002/eureka/


info:
  artifact: tao-elszamolas-config
  name: TAO Elszamolas Config Application
  description: Tao elszamolas microservice elosztott szolgaltatas konfiguracio
  version: 1.0.0
发现(Eureka)服务器的Dockerfile:

bootstrap.yml用于Discovery(Eureka)服务器:

用于Discovery(Eureka)服务器的application.yml

最后,这是我如何开始我的容器。这很简单:

docker-compose up -d
整个应用程序堆栈在本地工作,无需Docker。所以我想问题在于我的Docker配置

还有一件事需要提及,通常,我不想将端口发布到主机,只想在容器之间的自定义网络上公开它们。这就是为什么我尝试用EXPOSE替换端口的原因,但实际上没有帮助

对于startup Compose,它不会等到容器“就绪”(无论对您的特定应用程序意味着什么)时才开始编写,而只会等到容器运行时才开始编写

因此,你应该参考:


等待,直到配置服务器容器准备就绪(已在端口9001上侦听),然后启动Eureka服务器容器

注册表
服务尝试在
配置
服务启动之前启动。你必须强迫他等。 您可以使用
条件:服务\u已启动
,如下所示。但我认为它不适用于版本3

version: '2.1'

# ...

tao-elszamolas-discovery:
    build: ./tao-elszamolas-discovery
    container_name: tao-elszamolas-discovery
    depends_on:
        - tao-elszamolas-config:
            condition: service_started
    ports:
        - "9002:9002"
    volumes:
        - "/tao-elszamolas/logs:/var/log/tao-elszamolas"
    networks:
        - taonetwork
版本3的解决方案是使用
healthcheck
restart:on failure
看看这个

另一种解决方案是使用
entrypoint
节在开始时启动批处理文件,该批处理文件在服务容器没有响应时正在ping
configuration
服务容器

spring:
  application:
    name: discovery-server
  cloud:
    config:
      fail-fast: true
      name: discovery-server
      uri: http://tao-elszamolas-config:9001
      username: something
      password: something
server:
  port: 9002

eureka:
  instance:
    hostname: tao-elszamolas-discovery
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://tao-elszamolas-discovery:9002/eureka

info:
  artifact: tao-elszamolas-discovery
  name: TAO Elszamolas Eureka Szolgaltatas monitor
  description: Tao elszamolas automatikus szolgaltatas regisztracio
  version: 1.0.0
docker-compose up -d
version: '2.1'

# ...

tao-elszamolas-discovery:
    build: ./tao-elszamolas-discovery
    container_name: tao-elszamolas-discovery
    depends_on:
        - tao-elszamolas-config:
            condition: service_started
    ports:
        - "9002:9002"
    volumes:
        - "/tao-elszamolas/logs:/var/log/tao-elszamolas"
    networks:
        - taonetwork