Java 使用Docker compose在Docker中发布链接容器

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时遇到

我正在使用Docker来准备我的微服务架构。 我在尝试使用docker compose将一个容器链接到另一个容器时遇到了一些问题

基本上,我有一个用于postgressql映像的容器,还有一个用spring boot开发的java微服务,它应该连接到数据库容器

因此,我在docker-compose.yml中设置了一个链接,并使用以下命令将db容器ip引用为“db”:

-“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,所以可能这就是系统变量未设置的原因