我有一个docker-compose。定义卷节的Yml文件如下所示:
volumes:
seqfs:
driver: azure_file
driver_opts:
share_name: seqtest
storage_account_name: stacctest
storage_account_key: ${STORAGE_ACCOUNT_KEY}
我试图在构建命令期间传递STORAGE_ACCOUNT_KEY:
docker-compose -f docker-compose.yml build --build-arg STORAGE_ACCOUNT_KEY="##########"
但是返回错误:
STORAGE_ACCOUNT_KEY变量未设置。默认为空字符串。
请注意,出于安全原因,我不想将STORAGE_ACCOUNT_KEY保存到.env等文件中——我想从命令行传递它。
我如何在我的docker-compose.yml中传递一个参数到卷部分?
关于你得到的错误:
docker-compose -f docker-compose.yml build --build-arg STORAGE_ACCOUNT_KEY="##########"
But an error is returned:
The STORAGE_ACCOUNT_KEY variable is not set. Defaulting to a blank string.
- 事实是
--build-arg
只处理ARG
- (顺便说一句,运行
docker-compose up --build
比运行docker-compose build
更简单,然后运行docker-compose up
) - 我能想到的唯一解决方案来实现你想要的是:
将
STORAGE_ACCOUNT_KEY=foobar
放到.env
文件中
并运行docker-compose up --build
或者将
STORAGE_ACCOUNT_KEY=foobar
放到other.env
文件中
并运行docker-compose --env-file=other.env up --build
(注意:docker/compose语法包含两种不同的
"env-file"
,关于这一微妙的细节,请参阅我的回答:通过docker-compose将变量从.env文件传递到dockerfile。或运行
STORAGE_ACCOUNT_KEY=foobar docker-compose up --build
结论:
您说您出于安全原因不希望将STORAGE_ACCOUNT_KEY保存到.env等文件中,因此乍一看您只会接受解决方案3。以上。
然而,请注意,不太可能3。如果假定您不信任docker主机的环境,则更安全。事实上,.env
文件可能受到保护,这要归功于文件权限(和.gitignore
FWIW),而上面的foobar
字符串会在运行进程的名称中自动泄漏(例如ps aux | grep STORAGE_ACCOUNT_KEY
)。