我正在使用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
這不是解決佔位符,這是java代碼沒有選擇你的選項,而不是docker和docker-compose提供的DNS解析。 – BMitch
但是,這是將容器彼此鏈接的唯一方法嗎?我的意思是,沒有在這裏做他的工作的是docker-compose,而不是將系統變量設置爲正確的值,以便可以解決佔位符。任何其他方式來做我所需要的? – fgonzalez
你知道環境變量沒有定義嗎?在你的「微服務」容器ID上嘗試一個'docker exec -i $ container_id env'。如果環境變量正在被定義,那麼問題在於java沒有使用它。 – BMitch