我正在使用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