2017-04-06 45 views
0

我正在使用Docker來準備好我的微服務體系結構。 我正在嘗試使用docker-compose將一個容器與另一個容器鏈接起來。使用Docker組合Docker中的容器組合問題

基本上我有一個postgressql映像的容器,以及一個用Spring引導開發的java微服務,它應該連接到數據庫容器。

所以我設置的碼頭工人,compose.yml一個鏈接,引用分貝容器IP作爲使用「DB」:

- "JAVA_OPTS=-Dpostgres.host=db"

但是我發現了以下錯誤先從微服務泊塢窗:

產生的原因:java.lang.IllegalArgumentException異常:無法解析的價值佔位符 'postgress.host' 「的jdbc:在PostgreSQL:// $ {} postgress.host:5432 /泊塢窗」

所以基本上這個佔位符不能解決,但通常碼頭組成應該照顧設置這個系統變量指向db容器IP地址對嗎?

我在做什麼錯了?

下面涉及到的文件:

泊塢窗,compose.yml:

version: "2" 
services: 
    microservices: 
     build: ./microservices 
     container_name: microservices 
     links: 
     - db 
     - consul 
     environment: 
     - "JAVA_OPTS=-Dpostgres.host=db" 
    consul: 
     image: consul 
     container_name: consul 
     ports: 
       - "8500:8500" 
    db: 
    image: postgres 
    container_name: local-postgres9.6 
    ports: 
      - "5432:5432" 
    environment: 
     POSTGRES_PASSWORD: docker 
     POSTGRES_USER: docker 

的微服務的application.yml:

server: 
    port: 8081 

project: 
    jdbc: 
    url: jdbc:postgresql://${postgres.host}:5432/docker 
    driver: org.postgresql.Driver 
    username: docker 
    password: docker 
+0

這不是解決佔位符,這是java代碼沒有選擇你的選項,而不是docker和docker-compose提供的DNS解析。 – BMitch

+0

但是,這是將容器彼此鏈接的唯一方法嗎?我的意思是,沒有在這裏做他的工作的是docker-compose,而不是將系統變量設置爲正確的值,以便可以解決佔位符。任何其他方式來做我所需要的? – fgonzalez

+0

你知道環境變量沒有定義嗎?在你的「微服務」容器ID上嘗試一個'docker exec -i $ container_id env'。如果環境變量正在被定義,那麼問題在於java沒有使用它。 – BMitch

回答

0

嘗試${db.host},根據documentation

鏈接服務的容器將可在與別名相同的主機名 或服務名稱(如果未指定別名)中訪問。

+0

沒有運氣,但謝謝,我剛剛發現JAVA_OPTS可能只在使用tomcat映像時才起作用。在我的情況下,我正在部署一個帶有嵌入式tomcat的springboot fat jar,所以也許這就是系統變量沒有設置的原因 – fgonzalez