如何将环境变量设为docker-compose.yml绝对路径?或配置Compose切换工作目录?
解决docker-compose.yml路径作为环境变量的问题
方法1:用.env文件固定配置目录
在你的docker-compose.yml同目录下创建.env文件,写入:
COMPOSE_DIR=$(pwd)
然后修改docker-compose.yml的环境变量配置:
services: your-service: environment: TEST_ENV: ${COMPOSE_DIR}/data
docker compose会自动加载yml所在目录的.env文件,这里的$(pwd)会解析为yml所在的绝对路径,不管你在哪个目录执行docker compose -f /xxx/docker-compose.yml up,TEST_ENV都会指向正确的路径。
方法2:执行命令时动态传递路径
如果不想用.env,执行命令时直接计算yml的目录并传入环境变量:
# 替换为你的docker-compose.yml实际路径 YML_FILE="/opt/app/docker-compose.yml" docker compose -f ${YML_FILE} up -e TEST_ENV=$(dirname $(realpath ${YML_FILE}))/data
realpath用来获取文件的绝对路径,dirname提取出目录部分,这样就能精准得到yml所在目录的绝对路径。
方法3:强制切换到yml目录执行命令
要是希望PWD直接等于yml所在目录,执行命令前先切换目录即可:
# 替换为你的yml路径 YML_FILE="/opt/app/docker-compose.yml" cd $(dirname $(realpath ${YML_FILE})) && docker compose up
嫌每次敲命令麻烦的话,可以配置bash别名简化:
# 将这行添加到~/.bashrc或~/.zshrc,保存后重启终端 alias dc='cd $(dirname $(realpath $1)) && docker compose'
之后直接用dc /opt/app/docker-compose.yml up,就会自动切换到yml所在目录执行命令,原来的${PWD}/data配置就能正常生效。
内容的提问来源于stack exchange,提问作者Meinrad
相关产品推荐
相关产品推荐

