如何将变量从环境属性传递到卷或另一个没有 .env 文件的 docker-compose 位置?

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

如果在

-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 并且没有“”是行不通的

docker docker-compose
1个回答
0
投票

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
环境变量在容器内根本不可见。

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