docker - 如何使用 make 文件将环境变量传递给 Docker 组合
问题描述
我们的 Makefile 中有一行读取 env 文件并将变量导出到 shell:
include .env
export $(shell sed 's/=.*//' .env)
这使得可以在生成文件任务中使用变量,例如
connect-db:
docker-compose exec mysql mysql --host=0.0.0.0 --user=${DATABASE_USER} --password=${DATABASE_PASSWORD} ${DATABASE_NAME}
但是 docker-compose 文件中也有服务,它们使用环境变量作为卷名。
yarn:
image: node:10
entrypoint: "yarn"
command: "help"
volumes:
- ${YARN_HOME}:/yarn
- ${PROJECT_DIR}:/opt/project
- ${SSH_AUTH_SOCK}:/ssh_agent
- ${SSH_ID_RSA}:/node/.ssh/id_rsa:ro
environment:
SSH_AUTH_SOCK: ${SSH_AUTH_SOCK}
GIT_SSH_COMMAND: "ssh -i /node/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
YARN_CACHE_FOLDER: "/yarn"
PROJECT_DIR: ${PROJECT_DIR}
YARN_HOME: ${YARN_HOME}
working_dir: /opt/project
当我运行docker-compose run yarn
容器时,容器被正确执行,但是如果我使用这个 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 禁用行时,任务可以工作,但使用变量的任务不能。
如何在这两种情况下使用环境变量?
解决方案
推荐阅读
- html - 我的 css 样式与元素在同一页面上工作,但从 .css 文件链接时不工作
- reactjs - 更新redux(用户身份验证)后反应渲染私有路由
- javascript - jQuery on() / living() 问题
- lua - HMAC-SHA2-224 Lua 实现没有给出正确的输出
- c++ - 非类型参数类型的 C++ 模板特化
- php - X-Accel-Redirect + php 不工作
- excel - 格式化 Excel Power Query 表
- jquery - jQuery滚动到元素不起作用3
- r - 使用摘要从 R 编写 .bib 文件
- haskell - 如何计算棋盘上的黑色棋子总数?