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

h43kikqp  于 2023-01-29  发布在  Docker
关注(0)|答案(3)|浏览(238)

我尝试在github-actions中建立一个运行私有docker映像的作业,我将使用容器选项. link在docker映像中进行构建。
我使用下面的代码:

jobs:
  container1:
    runs-on: ubuntu-latest
    container: saeed/privateimage:1
    steps:
      - uses: actions/checkout@v2
      - run: |
          echo "Runs inside a container"

但我不能提供我的码头枢纽凭据,所以它失败了。
我怎样才能通过身份验证来提取该私有映像?
谢谢。

quhf5bfb

quhf5bfb1#

对于那些试图在作业或步骤中使用发布到ghcr.io的新GitHub Docker Container Registry的***自定义***Docker映像的用户,这是我所做的。

步骤

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

1.进入你项目的GitHub仓库,然后进入Settings > Secrets > New Secret,创建一个密码,如下所示:

1.将该令牌放入计算机环境中,如下所示(或直接复制,以合适的方式):

export DOCKER_CONTAINER_REGISTRY_TOKEN=<the personal access token>

1.将您的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

1.然后,在存储库的.github/workflows/文件夹下创建一个action,在本例中,我们将其命名为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

1.打开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--"

结果编号
当你把一些东西推到repo之后,你应该看到类似这样的东西在你的动作中运行,在下面的截图中,我使用了我自己的docker图像found heresuper-action

然后,您可以看到作业的run命令正在使用Docker映像的容器中执行!

yv5phkfx

yv5phkfx2#

看起来今天已经添加了对它的支持,请参见blog post
文章用了这个例子:

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 }}

container的文档在这里。

o4hqfura

o4hqfura3#

更新:检查@本杰明W.的answer。GitHub行动added Private registry support for job and service containers

这些文档指出jobs.<job_id>.container.image应该是一个公开可用的映像:
“用作运行操作的容器的Docker映像。该值可以是Docker Hub映像名称或公共Docker注册表名称。”
您可以将用于访问专用docker注册表的凭据配置为secrets,然后使用密码登录并运行您的专用映像,例如:

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

相关问题