如何在 github 操作中使用私有 docker 图像

Moh*_*eed 7 docker github-actions

我正在尝试在运行私有 docker 映像的 github-actions 中设置作业。我将使用容器选项在该 docker 镜像中进行构建。链接

我正在使用以下代码:

jobs:
  container1:
    runs-on: ubuntu-latest
    container: saeed/privateimage:1
    steps:
      - uses: actions/checkout@v2
      - run: |
          echo "Runs inside a container"
Run Code Online (Sandbox Code Playgroud)

但是我无法提供我的 docker hub 凭证,所以它失败了。

如何进行身份验证以提取该私有映像?

谢谢。

Pab*_*rau 11

对于那些尝试在您的工作或步骤之一中使用发布到新 GitHub Docker 容器注册表的自定义Docker 映像的ghcr.io人,这就是我所做的。

脚步

  1. 创建个人访问令牌,如新 Docker 容器注册表的GitHub 文档中所示。为此,请转到您的GitHub Account > Settings > Developer Settings > Personal Access Tokens并为您的令牌选择以下选项:

    创建新的个人访问令牌

  2. 转到您项目的 GitHub 存储库,Settings > Secrets > New Secret然后创建一个像这样的秘密: 将包含您的个人访问令牌的机密添加到您的存储库

  3. 获取该令牌并将其像这样放入您的计算机环境中(或者只是复制它,以任何可行的方式):

    export DOCKER_CONTAINER_REGISTRY_TOKEN=<the personal access token>
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将您的 Docker 映像推送到ghcr.io/<YOUR_USERNAME>/<IMAGE_NAME>:<IMAGE_TAG>. 为此,您可以在将Docker 映像推送到 GitHub Docker 容器注册表的文档中找到相关信息。本质上,您可以在计算机中执行以下操作:

    # Login to your ghcr.io
    echo $DOCKER_CONTAINER_REGISTRY_TOKEN | docker login -u <YOUR_USERNAME> --password-stdin
    # As an example, here I pull an image, tag it, and push it.
    docker pull ubuntu:18.04
    docker tag ubuntu:18.04 ghcr.io/<YOUR_USERNAME>/my_special_ubuntu:latest
    docker push ghcr.io/<YOUR_USERNAME>/my_special_ubuntu:latest
    
    Run Code Online (Sandbox Code Playgroud)
  5. 然后,.github/workflows/在存储库中的文件夹下创建一个操作。在这个例子中,让我们命名它super-action

    # You can just create the file in whichever editor you use.
    # This can do the work though...
    cd $YOUR_PROJECT_PATH/.github/workflows
    touch super-action.yml
    
    Run Code Online (Sandbox Code Playgroud)
  6. 打开super-action.yml操作,您可以执行以下操作:

    # Action name
    name: Super Action
    
    # Here, this action will be enabled on all pushes.
    # Modify this to fit your needs.
    on:
        push
    
    # Jobs section
    jobs:
        # The job that will use the container image you just pushed to ghcr.io
        super-job:
            runs-on: ubuntu-18.04
            container:
                image: ghcr.io/<YOUR_USERNAME>/<IMAGE_NAME>:<IMAGE_TAG>
                credentials:
                   username: <YOUR_USERNAME>
                   password: ${{  secrets.DOCKER_CONTAINER_REGISTRY_TOKEN }}
            steps:
                - name: super-step
                  shell: bash
                  run: |
                    # Whatever commands you want to run here using the container with your
                    # new Docker image at ghcr.io!>
                    echo "--This is running in my custom Docker image--"
    
    
    Run Code Online (Sandbox Code Playgroud)

结果

将某些内容推送到存储库后,您应该会在操作中看到类似这样的内容。在下面的截图,我用我自己的码头工人形象在这里找到。和我自己的super-action

在 GitHub 操作中拉取 Docker 镜像

然后,您可以看到您的作业run命令正在使用该 Docker 映像在容器内执行! 在使用 ghcr.io 上的 Docker 映像的容器内作业执行命令


mas*_*eyb 8

更新:检查@Benjamin W.回答。GitHub Actions添加了对作业和服务容器的私有注册表支持


文档表明应该是公开可用jobs.<job_id>.container.image的图像:

“用作运行操作的容器的 Docker 映像。该值可以是 Docker Hub 映像名称或公共 docker 注册表名称。”

您可以将用于访问私有docker注册表的凭据配置为机密,然后使用这些机密登录并运行您的私有映像,例如:

  test:
    name: test
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2

      - name: example.com docker registry login
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login example.com -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

      - name: run backend tests using example.com/my-image
        run: |
          docker run --rm -i \
            -v ${PWD}:/workspace/source \
            -e PYTHONPATH=/workspace/source \
            -e DJANGO_SETTINGS_MODULE="www.settings" \
            -w /workspace/source \
            --entrypoint tox \
            example.com/my-image
Run Code Online (Sandbox Code Playgroud)


Ben*_* W. 8

看起来今天刚刚添加了对此的支持,请参阅博客文章

这篇文章使用了这个例子:

jobs:
  build:
    container:
      image: octocat/ci-image:latest
      credentials:
        username: mona
        password: ${{ secrets.docker_hub_password}}
    services:
      db:
        image:  octocat/testdb:latest
        credentials:
          username: mona
          password: ${{ secrets.docker_hub_password }}
Run Code Online (Sandbox Code Playgroud)

对于文档container在这里