Java 使用Docker compose在Docker中发布链接容器
我正在使用Docker来准备我的微服务架构。 我在尝试使用docker compose将一个容器链接到另一个容器时遇到了一些问题 基本上,我有一个用于postgressql映像的容器,还有一个用spring boot开发的java微服务,它应该连接到数据库容器 因此,我在docker-compose.yml中设置了一个链接,并使用以下命令将db容器ip引用为“db”:Java 使用Docker compose在Docker中发布链接容器,java,postgresql,docker,spring-boot,docker-compose,Java,Postgresql,Docker,Spring Boot,Docker Compose,我正在使用Docker来准备我的微服务架构。 我在尝试使用docker compose将一个容器链接到另一个容器时遇到了一些问题 基本上,我有一个用于postgressql映像的容器,还有一个用spring boot开发的java微服务,它应该连接到数据库容器 因此,我在docker-compose.yml中设置了一个链接,并使用以下命令将db容器ip引用为“db”: -“JAVA\u OPTS=-Dpostgres.host=db” 但是,我在使用docker启动microservice时遇到
-“JAVA\u OPTS=-Dpostgres.host=db”
但是,我在使用docker启动microservice时遇到以下错误:
原因:java.lang.IllegalArgumentException:无法解析值“jdbc:postgresql://${postgress.host}:5432/docker”中的占位符“postgress.host”
所以这个占位符基本上是无法解析的,但是docker Composited通常应该注意将这个系统变量设置为指向db容器IP地址,对吗
我做错了什么
以下是涉及的文件:
docker-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
请根据以下命令尝试
${db.host}
:
链接服务的容器将可在主机名处访问
与别名相同,如果未指定别名,则与服务名称相同
这不是解析占位符,这是java代码没有选择您的选项,不是docker和docker compose提供的DNS解析。但这是将容器相互链接的唯一方法,对吗?我的意思是,没有在这里完成工作的人是docker compose,没有将系统变量设置为正确的值以便可以解析占位符。还有其他方法可以满足我的需要吗?你知道环境变量没有定义吗?在“microservices”容器id上尝试使用
docker exec-i$container\u id env
。如果环境变量正在定义,那么问题是java没有使用它。不走运,但谢谢,我刚刚发现java\u选项可能仅在使用tomcat映像时才起作用。在我的例子中,我正在部署一个带有嵌入式tomcat的springboot胖jar,所以可能这就是系统变量未设置的原因