不能将变量传递给docker-compose中的volumes部分



我有一个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)
  • 我能想到的唯一解决方案来实现你想要的是:
  1. STORAGE_ACCOUNT_KEY=foobar放到.env文件中
    并运行docker-compose up --build

  2. 或者将STORAGE_ACCOUNT_KEY=foobar放到other.env文件中
    并运行docker-compose --env-file=other.env up --build

    (注意:docker/compose语法包含两种不同的"env-file",关于这一微妙的细节,请参阅我的回答:通过docker-compose将变量从.env文件传递到dockerfile。

  3. 或运行STORAGE_ACCOUNT_KEY=foobar docker-compose up --build

结论:

您说您出于安全原因不希望将STORAGE_ACCOUNT_KEY保存到.env等文件中,因此乍一看您只会接受解决方案3。以上。

然而,请注意,不太可能3。如果假定您不信任docker主机的环境,则更安全。事实上,.env文件可能受到保护,这要归功于文件权限(和.gitignoreFWIW),而上面的foobar字符串会在运行进程的名称中自动泄漏(例如ps aux | grep STORAGE_ACCOUNT_KEY)。

最新更新