我有一台运行Docker的EC2服务器,我想将以下内容添加到User Data
,以便在服务器启动时拉出/运行我的私有Dockerhub映像,如下所示:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证才能访问私人仓库myusername/hello
。
使用Github创建并上传部署密钥,Dockerhub是否提供类似的部署密钥选项?
答案 0 :(得分:4)
<强>更新强> 想出了一个更好的方法,它根本不涉及将你的信誉融入图像中。请参阅以下问题,以获取适用于解决此问题的信息:Is it secure to store EC2 User-Data shell scripts in a private S3 bucket?
这有助于在任何给定时间将您的秘密保存在所需的最少数量的地方。
想出更好的方法:
sudo docker login
.dockercfg
文件(例如/home/yourusername/.dockercfg
)。从现在开始,Docker将使用此文件进行所有身份验证。.dockercfg
文件。User Data
:#!/bin/bash sudo docker run -p 3333:3333 -d --name Hello yourusername/hello
现在,当您基于机器映像启动实例时,如果您运行docker命令的用户在其主目录中有sudo docker run
文件,则.dockercfg
命令将成功提取私有存储库。 / p>
希望能帮助任何想要解决这个问题的人。
答案 1 :(得分:2)
更新:请参阅我的其他答案,了解更好的方法,不需要将您的信用卡硬编码到User Data
脚本中
要启动实例以在启动时提取私有Dockerhub存储库,您只需在sudo docker login
命令之前运行User Data
启动脚本中的sudo docker run
进行身份验证,完全如下:
#!/bin/bash
sudo docker login -u <username> -p <password> -e <email>
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
这需要将您的Dockerhub信用卡硬编码到您的User Data
脚本中,这不太理想,但确实有效。
答案 2 :(得分:2)
如果您想使用ECS(为您创建EC2实例)并且不想在解决方案中使用文件存储,我想出了更好的方法。 我混合了@AJB建议的解决方案('用户数据'属性和'docker login'输出),我将描述这个过程:
docker login
(据我所知,不需要sudo),成功登录后运行cat .docker/config.json
,您将得到以下内容:
{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}
KEY
和EMAIL
放在一边cluster
,service
和task definition
(图片属性设置为yourusername/hello
),这将自动生成EC2的配置< / LI>
在EC2菜单上launch configuration
copy launch configuration
按钮并进行编辑以尝试(尽管我建议您继续使用Amazon Linux AMI
,除非必须,请设置新的描述性名称)mkdir /home/ec2-user/.docker/ echo '{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}' >> /home/ec2-user/.docker/config.json sudo stop ecs sudo start ecs
Auto Scaling Group将很快推出一个新实例,现在使用新配置允许访问DockerHub帐户上的私有存储库。