向容器添加一个秘密,而不向源代码控制暴露文件位置



我想将我的awscredentials文件添加到docker容器中,以便它可以访问aws api。凭据文件存在于我的主机/home/user/.aws/credentials

当从命令行运行容器时,我可以执行

docker run --rm -d -v /home/user/.aws/:/.aws:ro -d 
--env AWS_CREDENTIAL_PROFILES_FILE=/.aws/credentials proj:latest

在docker组合中,我可以用volumes属性挂载.aws目录,如下所示:

services:
proj:
volumes:
- aws_credentials:/.aws:ro
environment:
AWS_CREDENTIAL_PROFILES_FILE: /.aws/credentials
volumes:
aws_credentials:
external: true

我的问题是,如何用数据填充外部aws_credentials卷?

无效的方法:

  • 使用秘密而不是卷。我没有使用Docker swarm
  • 使用config代替volumes。我没有使用Docker swarm
  • 使用绑定挂载而不是卷。docker-compose文件被检入到源代码控制中,我不希望检入目录。
services:
proj:
volumes:
- /home/user/.aws/:/.aws:ro #<-- DO NOT WANT THIS IN SOURCE CONTROL
environment:
AWS_CREDENTIAL_PROFILES_FILE: /.aws/credentials

我想到的一个答案是使用环境变量,像这样:

services:
proj:
secrets:
- aws_credentials
environment:
AWS_CREDENTIAL_PROFILES_FILE: /run/secrets/aws_credentials
secrets:
aws_credentials:
file: ${awscredfile}

并确保awscredfile被加载到docker compose的父进程的环境中,或者在带有--env-file参数的env文件中传递给docker compose。

相关内容

  • 没有找到相关文章

最新更新