例如:在启动我的EC2实例时,我想自动运行
码头工人登录
所以我可以从dockerhub中提取私人图像然后运行它。要登录dockerhub,我需要输入一个用户名和密码,这就是我想要自动化的东西,但是我们无法弄清楚如何。
我知道您可以通过用户数据传入要在启动时运行的脚本。问题是我的脚本需要输入,我想自动输入该输入。
提前致谢!
答案 0 :(得分:1)
如果仅输入docker登录密码是您的问题,那么我建议您搜索docker登录手册。谷歌30秒给了我这个链接:
https://docs.docker.com/engine/reference/commandline/login/
它暗示了某种形式
docker login --username foo --password-stdin < ~/my_password.txt
将从当前用户主目录中的文件my_password.txt读取密码。
答案 1 :(得分:0)
对于您来说,最简单的解决方案似乎是修改脚本以接受命令行参数,并使用UserData字符串传递这些参数。
请注意,每次密码更改时,都需要更改启动配置。
此处更好的解决方案是store your containers in ECS,让AWS为您处理身份验证(从回购中提取正确的容器)。
您的UserData随后变为:
#!/bin/bash
mkdir -p /etc/ecs
rm -f /etc/ecs/ecs.config # cleans up any old files on this instance
echo ECS_LOGFILE=/log/ecs-agent.log >> /etc/ecs/ecs.config
echo ECS_LOGLEVEL=info >> /etc/ecs/ecs.config
echo ECS_DATADIR=/data >> /etc/ecs/ecs.config
echo ECS_CONTAINER_STOP_TIMEOUT=5m >> /etc/ecs/ecs.config
echo ECS_CLUSTER=<your-cluster-goes-here> >> /etc/ecs/ecs.config
docker pull amazon/amazon-ecs-agent
docker run --name ecs-agent --detach=true --restart=on-failure:10 --volume=/var/run/docker.sock:/var/run/docker.sock --volume=/var/log/ecs/:/log --volume=/var/lib/ecs/data:/data --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro --volume=/var/run/docker/execdriver/native:/var/lib/docker/execdriver/native:ro --publish=127.0.0.1:51678:51678 --env-file=/etc/ecs/ecs.config amazon/amazon-ecs-agent:latest
您可能需要也可能不需要上面指定的所有卷。
此设置允许AWS ecs-agent
为您处理容器编排。
答案 2 :(得分:0)
以下是我此时可以提出的建议 -
mybucket
。doc_pass.txt
)放入该S3存储桶将以下脚本放在用户数据中 -
aws s3 cp s3://mybucket/doc_pass.txt doc_pass.txt
cat doc_pass.txt | docker login --username=YOUR_USERNAME --password-stdin
这样您只需要保护您的S3存储桶,用户数据中不会显示任何机密信息。