Docker Compose 默认环境变量替换

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

docker-compose.yml

services:
    postgres:
        image: postgres:latest
        env_file:
            -   .env
        environment:
            - POSTGRES_PORT="${POSTGRES_PORT:-5078}"
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - POSTGRES_DB=${POSTGRES_DB}
            - POSTGRES_USER=${POSTGRES_USER}
        expose:
            - "$POSTGRES_PORT"
        healthcheck:
            test: [ "CMD", "/usr/bin/pg_isready", "-d", "$POSTGRES_DB", "-U", "$POSTGRES_USER", "-p", "$POSTGRES_PORT" ]
            interval: 15s
            timeout: 60s
            retries: 5
            start_period: 40s

    api:
        restart: always
        build:
            context: ./api
            target: base
        command: >
            bash -c "./manage.py migrate &&
                 ./manage.py runserver 0.0.0.0:8000"
        volumes:
            - ./api/apps:/code/apps
            - ./api/config:/code/config
            - ./api/docs:/code/docs
        ports:
            - "8000:8000"
        depends_on:
            postgres:
                condition: service_healthy

我的

.env
文件没有为 Postgres 定义端口,这就是为什么我试图在未给出时添加默认值,如 https://docs.docker.com/compose/environment 所示-变量/变量插值/#插值语法。每当我为
api
服务构建映像时,我都会收到警告
WARN[0000] The "POSTGRES_PORT" variable is not set. Defaulting to a blank string.
打印出的值也显示它为空。我该如何正确设置默认值?

docker docker-compose environment-variables
1个回答
0
投票

如果你查看 docker-compose 文档,你可以看到,

${POSTGRES_PORT:-5078}
表达式的情况下,必须设置 POSTGRES_PORT 的值且非空,否则默认`

你最好尝试下面的语法。

使用

${POSTGRES_PORT-5078}
代替
${POSTGRES_PORT:-5078}
,去除结肠。

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