Amazon ec2 如何从私有Dockerhub回购中自动运行docker?

Amazon ec2 如何从私有Dockerhub回购中自动运行docker?,amazon-ec2,docker,dockerhub,Amazon Ec2,Docker,Dockerhub,我有一台运行Docker的EC2服务器,我想将以下内容添加到用户数据中,这样我的私有Dockerhub映像将在服务器启动时被拉入/运行,如下所示: #!/bin/bash sudo docker run -p 3333:3333 -d --name Hello myusername/hello 但我不确定如何进行身份验证才能访问私人回购myusername/hello 使用Github创建并上传部署密钥,Dockerhub是否提供类似的部署密钥选项?更新:请参阅我的其他答案,以获得一种更好的方

我有一台运行Docker的EC2服务器,我想将以下内容添加到
用户数据中
,这样我的私有Dockerhub映像将在服务器启动时被拉入/运行,如下所示:

#!/bin/bash
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
但我不确定如何进行身份验证才能访问私人回购
myusername/hello


使用Github创建并上传部署密钥,Dockerhub是否提供类似的部署密钥选项?

更新:请参阅我的其他答案,以获得一种更好的方法,该方法不需要将您的凭据硬编码到
用户数据中


要在启动时获取一个实例以拉取私有Dockerhub回购,只需在
sudo docker run
命令之前,在
User Data
启动脚本中运行
sudo docker login
即可进行身份验证:

#!/bin/bash
sudo docker login -u <username> -p <password> -e <email>
sudo docker run -p 3333:3333 -d --name Hello myusername/hello
#/bin/bash
sudo docker登录-u-p-e
sudo docker run-p3333:3333-d——名称Hello myusername/Hello
这需要将Dockerhub代码硬编码到
用户数据
脚本中,虽然不太理想,但确实有效

更新: 想出了一个更好的方法,根本不需要把你的信用卡烘焙成一个形象。有关解决此问题的信息,请参见以下问题:

这有助于在任何给定时间将您的秘密保存在最少的必要位置


找到了更好的方法:

  • 使用所需的操作系统启动计算机
  • 安装Docker
  • 在那台机器上运行
    sudo docker login
  • 认证成功后,Docker将在您的主目录中放置一个
    .dockercfg
    文件(例如
    /home/yourusername/.dockercfg
    )。从现在起,Docker将使用此文件进行所有身份验证
  • 创建要在启动所有新实例时使用的计算机映像。此图像现在将烘焙
    .dockercfg
    文件
  • 将以下内容添加到机器映像的用户数据中:
  • 现在,如果运行docker命令的用户在其主目录中有一个
    .dockercfg
    文件,那么当您基于机器映像启动实例时,您的
    sudo docker run
    命令将成功拉取私有repo


    希望这能帮助任何想了解这一点的人。

    如果您想使用ECS(为您创建EC2实例),而不想在解决方案中使用文件存储,我找到了一种更好的方法。 我混合了@AJB(“用户数据”属性和“docker登录”输出)建议的解决方案,我将描述该过程:

  • 在您的机器上使用
    docker-login
    (据我所知,不需要sudo),成功登录后运行
    cat.docker/config.json
    ,您将得到如下结果:
  • {“auths”:{”https://index.docker.io/v1/“:{“auth”:“KEY”,“email”:“email”}}}

  • 电子邮件
    复制到一边
  • 在ECS上-创建一个
    集群
    服务
    和一个
    任务定义
    (图像属性设置为
    yourusername/hello
    ),这将自动生成EC2的配置
  • 在EC2菜单上-进入启动配置菜单,选择ECS生成的
    启动配置
  • 单击
    copy launch configuration
    按钮并编辑以体验(您可以更改AMI,尽管我建议您继续使用
    Amazon Linux AMI
    ,除非您必须设置一个新的描述性名称)
  • 在内部编辑详细信息->高级详细信息编辑用户数据属性并添加以下内容(替换密钥和电子邮件):
  • 切换到自动缩放组菜单,选择ECS生成的组
  • 单击编辑并选择刚刚创建的启动配置,然后保存
  • 切换到“实例”菜单并终止正在运行的实例
  • 你完了
    Auto Scaling Group不久将启动一个新实例,它现在使用新配置,允许访问DockerHub帐户上的私有存储库。

    是的,我认为这是一个bug。我遵循了这两种方法,但都不起作用(使用两种身份验证类型);为了安全起见,我还将docker hub凭据写入/etc/ecs/ecs.config。
    #!/bin/bash
    sudo docker run -p 3333:3333 -d --name Hello yourusername/hello
    
    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