簡體   English   中英

使用docker-compose時未檢索到Spring Cloud屬性

[英]spring cloud properties not retrieved when use docker-compose

我面臨一個奇怪的問題,我為我的每個服務(spring-cloud,eureka,my-service)創建一個DockerFile,因此當我啟動docker compose時,spring cloud服務器啟動,eureka啟動,但是我的應用程序未啟動能夠從Spring Cloud檢索配置,但是當我訪問出現在日志中的URL時,它對如何解決此問題一無所知。

關注我的DockerFiles:Spring Cloud Docker文件

FROM openjdk:11.0.2-jre-stretch

RUN ["mkdir", "/root/remote-config-service"]
COPY target/remote-config-service-0.0.1-SNAPSHOT.jar /root/remote-config-service/

ENTRYPOINT java -jar /root/remote-config-service/remote-config-service-0.0.1-SNAPSHOT.jar

EXPOSE 9000 9001

eureka Docker文件:

FROM openjdk:11.0.2-jre-stretch

RUN ["mkdir", "/root/eureka-service-discovery"]
COPY target/eureka-service-discovery-0.0.1-SNAPSHOT.jar /root/eureka-service-discovery/

ENTRYPOINT java -jar /root/eureka-service-discovery/eureka-service-discovery-0.0.1-SNAPSHOT.jar

EXPOSE 8761

我的應用程序Docker文件:

FROM openjdk:11.0.2-jre-stretch

ENV PROFILE="dev"

ADD ["target/product-api-0.0.1-SNAPSHOT.jar", "product-api-0.0.1-SNAPSHOT.jar"]
EXPOSE 18100 8091
RUN sh -c 'touch /product-api-0.0.1-SNAPSHOT.jar'

ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$PROFILE -jar /product-api-0.0.1-SNAPSHOT.jar" ]


HEALTHCHECK --interval=5m --timeout=3s \
    CMD curl -f http://localhost:8091/actuator/health || exit 1

Docker撰寫

  remote-config-service:
    container_name: remote-config-service
    build: ./remote-config-service
    ports:
      - 9000:9000
      - 9001:9001
    depends_on:
      - mysqldb

  eureka-service-discovery:
    build: ./eureka-service-discovery
    container_name: eureka-service-discovery
    hostname: localhost
    restart: on-failure
    ports:
      - 8761:8761

  product-api:
    container_name: product-api
    build: ./product-api
    ports:
      - 18000:18000
      - 8091:8091
    depends_on:
      - eureka-service-discovery
      - remote-config-service
      - mysqldb
    restart: on-failure

當我嘗試啟動我的應用程序(product-api)時,我遇到此錯誤:

c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:9000
c.c.c.ConfigServicePropertySourceLocator : Connect Timeout Exception on Url - http://localhost:9000. Will be trying the next url if available
c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://localhost:9000/product-api/dev": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)

但是當我在瀏覽器中訪問此網址時:

http://localhost:9000/product-api/dev

它工作正常。

有人有什么想法可以幫助我解決這個問題嗎?

Docker容器默認情況下無法通過localhost相互通信,它們在網絡方面彼此隔離。 這就是為什么您可以在瀏覽器中轉到localhost:9000,但容器無法訪問它的原因。 容器中的本地主機僅是該容器的回送地址,而不是主機的回送地址。 有幾種不同的網絡類型(請參閱https://docs.docker.com/network/ ),但默認類型為bridge 橋接網絡將您的容器與主機上的其他容器網絡隔離開,然后將主機端口之一上的流量轉發到容器端口(由port: <host>:<container>定義port: <host>:<container>條目)。有兩個選項允許容器執行以下操作:互相溝通:

  • network: host運行network: host (不推薦)。 這將直接在主機網絡上運行您的容器,以便它們都可以通過localhost相互通信。 如果使用此port: ,則可以擺脫port:設置。 容器會將服務使用的任何端口直接綁定到主機(如果要運行使用同一端口的多個容器,這也會導致端口沖突。)
  • 使用鏈接(已棄用)
  • 使用用戶定義的網絡https://docs.docker.com/compose/networking/ (推薦)
    前docker-compose.yml:

     version: '3' services: service1: container_name: service1 build: . networks: - servicenet ports: - 8888:9000 service2: build: . container_name: service2 restart: on-failure networks: - servicenet ports: - 8887:8761 networks: servicenet: 

這將允許service1通過http://service1與service2通信,反之亦然

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM