如何使用 Github Actions 登录 Docker 注册表

13

我正在尝试按照GitHub文档的方式使用GitHub Actions将一个Docker镜像推送到公共Docker仓库,但我无法使其正常工作:

name: CI

on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: actions/docker/login@master
        with: # Set the secret as an input
          DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
          DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
        env: # Set the secret in the env
          DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
          DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
      - name: Test
        run: mvn clean verify -U
      - name: build
        run: ./mvnw compile jib:dockerBuild
      - name: push
        run:  docker push odfsoft/guess-game:latest

我遇到了下面的错误:

/usr/bin/docker run --name bb8146f4246c56a44203bb2667ccfbdcab81_f18969 --label 04bb81 --workdir /github/workspace --rm -e DOCKER_USERNAME -e DOCKER_PASSWORD -e INPUT_DOCKER_USERNAME -e INPUT_DOCKER_PASSWORD -e HOME -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/spring-boot-guess-game/spring-boot-guess-game":"/github/workspace" 04bb81:46f4246c56a44203bb2667ccfbdcab81
Error: Cannot perform an interactive login from a non TTY device

这是否与我的操作有关,还是Github Actions本身的限制?


未来的读者注意:DOCKER_PASSWPORD 中有拼写错误。 - Michael Bisbjerg
6个回答

21
actions/docker操作现已被弃用。如果您访问该存储库,您将看到该存储库已存档并显示以下消息。

此操作已停用,建议使用新的YAML语言中的run脚本步骤来运行docker cli。

https://github.com/actions/docker

因此,推荐的登录Docker registries方法是使用以下命令的run脚本。

对于公共DockerHub registry:

name: my workflow
on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Login to DockerHub Registry
        run: echo ${{ secrets.DOCKERHUB_PASSWORD }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin

对于私有仓库,比如新的 GitHub 包管理器,您还需要指定主机名:

name: my workflow
on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Login to GitHub Package Registry
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login docker.pkg.github.com -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

请参见此答案,以获取有关Docker镜像发布的完整工作流示例。


5
我遇到了这个错误:错误:无法从非TTY设备执行交互式登录。 - Sudip Bhandari
@SudipBhandari 当您忘记 --password-stdin 时,会出现该错误。 echo "${{ secrets.DOCKER_PASSWORD }}" | docker login docker.pkg.github.com -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - Alex 75

4

1

1

对于服务容器,请参考以下示例:

jobs:
  build:
    container:
      image: octocat/ci-image:latest
      credentials:
        username: mona
        password: ${{ secrets.docker_hub_password}}
    services:
      db:
        image:  ghcr.io/octocat/testdb:latest
        credentials:
          username: ${{ github.repository_owner }}
          password: ${{ secrets.ghcr_password }}

0

使用 docker/login-action@v1 登录到 Docker Registry https://github.com/docker/login-action

name: deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: docker/login-action@v1
            with:
              registry: private-registry-url
              username: ${{ secrets.USERNAME  }}
              password: ${{ secrets.PASSWORD }}

-5

要登录到Dockerhub,您可以使用actions/docker repo中提供的操作。

它看起来像这样:

action "Docker Login" {
  uses = "actions/docker/login@master"
  secrets = ["DOCKER_USERNAME", "DOCKER_PASSWORD"]
}

HCL已经被弃用,应采用yaml语言:https://help.github.com/en/articles/migrating-github-actions-from-hcl-syntax-to-yaml-syntax - bradj
是的,这是我之前找到的例子,但现在已经不起作用了,因为现在需要使用yaml。顺便说一句,我没有给你投反对票。 - Folger Fonseca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接