如何通过make文件将环境变量传递给Docker compose

如何通过make文件将环境变量传递给Docker compose,docker,makefile,devops,Docker,Makefile,Devops,我们的Makefile中有一行,它读取env文件并将变量导出到shell: include.env export$(shell sed的/=.*/'.env) 这允许在生成文件任务中使用变量,如 connectdb: docker compose exec mysql mysql--host=0.0.0.0--user=${DATABASE\u user}--password=${DATABASE\u password}${DATABASE\u NAME} 但是docker compose文

我们的Makefile中有一行,它读取env文件并将变量导出到shell:

include.env
export$(shell sed的/=.*/'.env)
这允许在生成文件任务中使用变量,如

connectdb:
docker compose exec mysql mysql--host=0.0.0.0--user=${DATABASE\u user}--password=${DATABASE\u password}${DATABASE\u NAME}
但是docker compose文件中也有服务,它们使用环境变量作为卷名

纱线:
图像:节点:10
入口点:“纱线”
命令:“帮助”
卷数:
-${THEAN_HOME}:/THEAN
-${PROJECT_DIR}:/opt/PROJECT
-${SSH\u AUTH\u SOCK}:/SSH\u代理
-${SSH\u ID\u RSA}:/node/.SSH/ID\u RSA:ro
环境:
SSH_AUTH_SOCK:${SSH_AUTH_SOCK}
GIT_SSH_命令:“SSH-i/node/.SSH/id_rsa-o UserKnownHostsFile=/dev/null-o strichostkeychecking=no”
纱线缓存文件夹:“/纱线”
PROJECT_DIR:${PROJECT_DIR}
纱线之家:${纱线之家}
工作目录:/opt/项目
当我运行
docker compose run
时,容器被正确执行,但如果我使用此docker compose命令运行make任务,则会记录一个错误

make yarn
docker-compose run --rm yarn
ERROR: Cannot create container for service yarn: create .: volume name is too short, names should be at least two alphanumeric characters
当使用include.env禁用行时,任务工作,但使用变量的任务不工作


如何在这两种情况下使用环境变量?

Compose并不是为您描述的设置而构建的;在Makefile中写出
docker run
命令可能会更好一些。但是,为什么不直接在主机上运行
warn
?它可以直接访问ssh代理、用户主目录、相对路径等,而无需跳过所有这些障碍。对我来说,它似乎是
make
导出了一些解析为
的变量,这是
PROJECT_DIR
?您没有在
Makefile
的某个地方定义它吗?