我有一个运行 Docker 的 EC2 服务器,我想将以下内容添加到User Data
服务器启动时,我的私有 Dockerhub 映像将被拉取/运行,如下所示:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证以访问私有 repo myusername/hello
。
使用 Github 创建和上传部署密钥,Dockerhub 是否提供类似的部署密钥选项?
我有一个运行 Docker 的 EC2 服务器,我想将以下内容添加到User Data
服务器启动时,我的私有 Dockerhub 映像将被拉取/运行,如下所示:
#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证以访问私有 repo myusername/hello
。
使用 Github 创建和上传部署密钥,Dockerhub 是否提供类似的部署密钥选项?
更新: 想出了一个更好的方法,它根本不涉及将你的信用烘焙到图像中。有关适用于解决此问题的信息,请参阅以下问题:将 EC2 用户数据 shell 脚本存储在私有 S3 存储桶中是否安全?
这有助于在任何给定时间将您的秘密保存在最少的必要位置。
想出了一个更好的方法:
sudo docker login
在那台机器上运行.dockercfg
在您的主目录中放置一个文件(例如/home/yourusername/.dockercfg
)。从现在开始,Docker 将使用此文件进行所有身份验证。.dockercfg
文件烘焙。User Data
您的机器映像中:#!/bin/bash sudo docker run -p 3333:3333 -d --name Hello yourusername/hello
现在,当您基于您的机器映像启动一个实例时,您的sudo docker run
命令将成功提取私有存储库,前提是您运行 docker 命令的用户.dockercfg
在其主目录中有一个文件。
希望能帮助任何想弄清楚这一点的人。
更新:请参阅我的其他答案以获得更好的方法,该方法不需要将您的凭据硬编码到您的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
脚本中,这并不理想,但它确实有效。
如果您想使用 ECS(为您创建 EC2 实例)并且不想在您的解决方案中使用文件存储,我想出了一个更好的方法。我混合了@AJB 建议的解决方案('User Data' 属性和'docker login' 输出),我将描述这个过程:
docker login
(据我所知,不需要 sudo),在成功登录运行后cat .docker/config.json
,您将得到如下信息:
{"auths":{"https://index.docker.io/v1/":{"auth":"KEY","email":"EMAIL"}}}
KEY
和EMAIL
放在一边cluster
和service
a task definition
(将 image 属性设置为yourusername/hello
),这将自动生成 EC2 的配置launch configuration
由 ECS 生成copy launch configuration
按钮并编辑以品尝(您可以更改 AMI,尽管我建议您继续使用,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 帐户上的私有存储库。