我正在Amazon EC2上运行docker-container。目前我已经将AWS凭证添加到Dockerfile。你能告诉我最好的方法吗?
当前回答
还有一种方法是在docker-compose.yaml中创建临时只读卷。AWS CLI和SDK(如boto3或AWS SDK for Java等)正在~/中寻找默认配置文件。aws /凭证文件。
如果要使用其他配置文件,在执行docker-compose命令之前,还需要导出AWS_PROFILE变量。
出口AWS_PROFILE = some_other_profile_name
version: '3'
services:
service-name:
image: docker-image-name:latest
environment:
- AWS_PROFILE=${AWS_PROFILE}
volumes:
- ~/.aws/:/root/.aws:ro
在这个例子中,我在docker上使用root用户。如果您正在使用其他用户,只需更改/root/。Aws到用户主目录。
:ro -只读docker卷
当您在~/中有多个概要文件时,这是非常有用的。aws/凭证文件,您也在使用MFA。如果你想在ECS上部署docker-container之前对它进行本地测试(在ECS上你有IAM角色,但在本地你没有),这也是有帮助的。
其他回答
你可以创建~/aws_env_creds包含:
touch ~/aws_env_creds
chmod 777 ~/aws_env_creds
vi ~/aws_env_creds
添加这些值(替换你的密钥):
AWS_ACCESS_KEY_ID=AK_FAKE_KEY_88RD3PNY
AWS_SECRET_ACCESS_KEY=BividQsWW_FAKE_KEY_MuB5VAAsQNJtSxQQyDY2C
按“esc”保存文件。
运行并测试容器:
my_service:
build: .
image: my_image
env_file:
- ~/aws_env_creds
还有一种方法是在docker-compose.yaml中创建临时只读卷。AWS CLI和SDK(如boto3或AWS SDK for Java等)正在~/中寻找默认配置文件。aws /凭证文件。
如果要使用其他配置文件,在执行docker-compose命令之前,还需要导出AWS_PROFILE变量。
出口AWS_PROFILE = some_other_profile_name
version: '3'
services:
service-name:
image: docker-image-name:latest
environment:
- AWS_PROFILE=${AWS_PROFILE}
volumes:
- ~/.aws/:/root/.aws:ro
在这个例子中,我在docker上使用root用户。如果您正在使用其他用户,只需更改/root/。Aws到用户主目录。
:ro -只读docker卷
当您在~/中有多个概要文件时,这是非常有用的。aws/凭证文件,您也在使用MFA。如果你想在ECS上部署docker-container之前对它进行本地测试(在ECS上你有IAM角色,但在本地你没有),这也是有帮助的。
最好的方法是使用IAM Role,完全不处理凭据。(见http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
凭据可以从http://169.254.169.254.....检索由于这是一个私有ip地址,因此只能从EC2实例访问它。
所有现代AWS客户端库都“知道”如何从那里获取、刷新和使用凭据。所以在大多数情况下你甚至不需要知道它。只需使用正确的IAM角色运行ec2,就可以了。
作为一个选项,你可以在运行时传递它们作为环境变量(即docker run -e AWS_ACCESS_KEY_ID=xyz -e AWS_SECRET_ACCESS_KEY=aaa myimage)
您可以通过在终端上运行printenv来访问这些环境变量。
对于PHP apache docker,下面的命令是有效的
docker run --rm -d -p 80:80 --name my-apache-php-app -v "$PWD":/var/www/html -v ~/.aws:/.aws --env AWS_PROFILE=mfa php:7.2-apache
如果有人在遵循已接受答案中提到的说明后仍然面临同样的问题,那么请确保您没有传递来自两个不同来源的环境变量。在我的情况下,我通过文件和参数传递环境变量到docker运行,这导致作为参数传递的变量显示没有影响。
所以下面的命令对我没用:
docker run --env-file ./env.list -e AWS_ACCESS_KEY_ID=ABCD -e AWS_SECRET_ACCESS_KEY=PQRST IMAGE_NAME:v1.0.1
将aws凭证移动到提到的env。列表文件帮助。
推荐文章
- 如何从docker更改默认docker注册表。IO到我的私人注册表?
- 我如何获得亚马逊的AWS_ACCESS_KEY_ID ?
- 如何使所有对象在AWS S3桶公共默认?
- Docker- compose无法连接到Docker Daemon
- 单个命令停止和删除docker容器
- 为什么我应该使用亚马逊Kinesis而不是SNS-SQS?
- 使用GPU从docker容器?
- 如何使用本地映像作为dockerfile的基本映像?
- 谁能解释一下docker.sock
- 多重from是什么意思
- 通过映像名称停止Docker容器- Ubuntu
- 如果dockerfile的名称不是dockerfile,我如何构建一个dockerfile ?
- 如何重命名AWS S3 Bucket
- 守护进程的错误响应:已被集装箱使用"
- AWS ECS中的任务和服务之间有什么区别?