如何向Docker外部卷aws_credentials填充AWS凭证且不暴露本地路径
如何给Docker外部卷填充AWS凭证数据
问题背景
我需要将主机上/home/user/.aws/credentials的AWS凭证文件添加到Docker容器中,让容器能够访问AWS API。
通过命令行运行容器时可以执行以下命令:
docker run --rm -d -v /home/user/.aws/:/.aws:ro \ --env AWS_CREDENTIAL_PROFILES_FILE=/.aws/credentials proj:latest
使用Docker Compose时,我希望通过外部卷挂载.aws目录,配置如下:
services: proj: volumes: - aws_credentials:/.aws:ro environment: AWS_CREDENTIAL_PROFILES_FILE: /.aws/credentials volumes: aws_credentials: external: true
但我不清楚如何向这个外部卷aws_credentials填充数据,且以下方法均不可行:
- 使用secrets替代volumes:未使用Docker Swarm
- 使用config替代volumes:未使用Docker Swarm
- 使用绑定挂载替代卷:Docker Compose文件需提交到源码控制,不想包含本地路径
services: proj: volumes: - /home/user/.aws/:/.aws:ro # <-- 不想把这个写进源码控制 environment: AWS_CREDENTIAL_PROFILES_FILE: /.aws/credentials
解决方法
你可以通过临时容器挂载外部卷和本地凭证目录,将文件复制到外部卷中,具体步骤如下:
- 创建外部卷(若未创建)
docker volume create aws_credentials
- 复制本地凭证到外部卷
运行临时容器,将本地.aws目录的内容复制到外部卷中:
docker run --rm -v /home/user/.aws:/source -v aws_credentials:/target busybox cp -r /source/. /target/
这条命令借助busybox镜像完成文件复制,执行后临时容器会自动删除(--rm参数)。
- 验证卷内数据
可以通过临时容器查看外部卷的内容,确认数据是否成功填充:
docker run --rm -v aws_credentials:/aws busybox ls -la /aws
若能看到credentials文件,说明数据已成功写入外部卷。
完成以上步骤后,即可正常使用之前的Docker Compose配置启动容器,容器会通过外部卷获取AWS凭证。
内容的提问来源于stack exchange,提问作者f.khantsis
相关产品推荐
相关产品推荐

