如果在
-e variable
中没有传递任何内容,我想传递默认环境变量来使用它。所以,我做了这样的事情
services:
db:
environment:
- DATABASES_FOLDER=/raw_databases
image: postgres
volumes:
- "${DATABASES_FOLDER}/postgres:/var/lib/postgresql/data"
但是当我这样做时,容器只看到 /postgres:/var/lib/postgresql/data"
$DATABASES_FOLDER 并且没有“”是行不通的
Compose 有两种不同级别的环境变量处理。当你说
volumes:
- "${DATABASES_FOLDER}/postgres:/var/lib/postgresql/data"
它查看主机的环境和
.env
文件。这与你说的时候是分开的
environment:
- DATABASES_FOLDER=/raw_databases
它在容器内设置环境变量,但不影响文件中其他位置的变量替换。
如果您只想使用默认值,Compose 支持 Bourne-shell-style
${VARIABLE:-default}
替换。所以您正在寻找的路径可能是
services:
db:
image: postgres
volumes:
- "${DATABASES_FOLDER:-/raw_databases}/postgres:/var/lib/postgresql/data"
# no environment: {DATABASES_FOLDER: ...} setting
如果你跑步
DATABASES_FOLDER=$HOME/myapp docker-compose up -d
然后它将把数据存储在
$HOME/myapp/postgres
中。 DATABASES_FOLDER
环境变量在容器内根本不可见。