Docker Compose-服务名称无法用作环境变量

问题描述 投票:0回答:1

我正在尝试使用docker-compose设置Spring Cloud项目。

我正在使用Spring Cloud配置,所以我有一个Configuration Server和一些服务。

目前,我在docker-compose.yml中有3个服务

version: '3'

services:
    db:
        image: mysql
        restart: always
        environment: 
            MYSQL_ROOT_PASSWORD: 'root' # TODO: Change this
            MYSQL_USER: 'user'
            MYSQL_PASS: 'password'
            MYSQL_ROOT_HOST: '%'
        volumes:
            - "db:/opt/mysql/docker:rw"
        ports:
            - "3307:3306"

    config:
        image: config-server
        restart: always
        depends_on:
            - db
        environment:
            - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/ec_settings?createDatabaseIfNotExist=true&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC                
        ports:
            - "8100:8100"

    gateway:
        image: gateway
        restart: always
        depends_on:
            - config
        environment:
            - CONFIG_URI=http://config:8100
        ports:
            - '8081:8080'

volumes:
    db: {}

在网关微服务中,在bootstrap.yml中,我具有此设置

spring:
  cloud:
    config:
      uri: ${CONFIG_URI}

[当我放置docker composer时,我看到网关服务正在尝试从http://config:8100获取配置

 Fetching config from server at : http://config:8100

因此,该变量传递给Spring Boot,但docker-compose并未将服务名称替换为其实际链接。十分奇怪的是,SPRING_DATASOURCE_URL环境变量在配置服务中正确转换以连接到数据库服务。

docker-compose spring-cloud-config
1个回答
0
投票

由于此链接Docker - SpringConfig - Connection refused to ConfigServer,我终于解决了它

问题是服务试图过早获取配置URL。解决方法是将bootstrap.yml放入此设置

© www.soinside.com 2019 - 2024. All rights reserved.