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-compose 文档,你可以看到,
在
${POSTGRES_PORT:-5078}
表达式的情况下,必须设置 POSTGRES_PORT 的值且非空,否则默认`
你最好尝试下面的语法。
使用
${POSTGRES_PORT-5078}
代替 ${POSTGRES_PORT:-5078}
,去除结肠。