英文:
unable to push docker image using github actions
问题
这是您的代码部分翻译:
我正在尝试创建一个 Docker 镜像并将其推送到 GitHub。
这是我的 `main.yml` 文件:
name: Docker
on:
push:
branches:
- master
env:
TODO: 更改变量为您的镜像名称。
IMAGE_NAME: java-app
jobs:
push:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v2
- name: 构建镜像
run: docker build --file ./docker/Dockerfile --tag ${{ env.IMAGE_NAME }} .
- name: 登录到注册表
run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} registry.hub.docker.com
- name: 推送镜像
run: |
IMAGE_ID=${{ secrets.DOCKERHUB_USERNAME }}/qfix-test
# 从版本中去除 git 引用前缀
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),,')
# 去除标签名称中的 "v" 前缀
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# 使用 Docker 的 'latest' 标签约定
[ "$VERSION" == "master" ] && VERSION=latest
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
docker tag ${{ env.IMAGE_NAME }} $IMAGE_ID:$VERSION
docker push $IMAGE_ID:$VERSION
这里是错误信息:
推送引用到仓库 [docker.io/***/java-app]
d1eab8b60748: 等待中
未经授权: 访问令牌权限不足
错误: 进程以退出码 1 完成。
我已经创建了两个密钥,一个是 `dockerhub_username`,另一个是 `dockerhub_password`,其中包含具有读、写和删除权限的访问令牌。我不知道我在这里做错了什么。
英文:
I am trying to create a docker image and push it on github.
here's my main.yml
name: Docker
on:
push:
branches:
- master
env:
# TODO: Change variable to your image's name.
IMAGE_NAME: java-app
jobs:
push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build image
run: docker build --file ./docker/Dockerfile --tag ${{ env.IMAGE_NAME }} .
- name: Log into registry
run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} registry.hub.docker.com
- name: Push image
run: |
IMAGE_ID=${{ secrets.DOCKERHUB_USERNAME }}/qfix-test
# Strip git ref prefix from version
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),,')
# Strip "v" prefix from tag name
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//')
# Use Docker `latest` tag convention
[ "$VERSION" == "master" ] && VERSION=latest
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
docker tag ${{ env.IMAGE_NAME }} $IMAGE_ID:$VERSION
docker push $IMAGE_ID:$VERSION
Here's the error:
The push refers to repository [docker.io/***/java-app]
d1eab8b60748: Waiting
unauthorized: access token has insufficient scopes
Error: Process completed with exit code 1.
I have created 2 secrets one with dockerhub_username, dockerhub_password which has the access token with read, write and delete permissions. I don't know what I am doing wrong here.
答案1
得分: 1
我弄清楚了!
问题是登录方式不正确。
正确的方式是:
-
name: 登录到 Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
一旦我用上面的登录方式替换了这个 run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} registry.hub.docker.com
,就可以正常工作了!
详细信息可以在这里找到:https://docs.docker.com/build/ci/github-actions/
英文:
I figured it out!
The issue was that it was the wrong way to login.
The correct way is:
-
name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
As soon as I replaced this run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} registry.hub.docker.com
with the above login it worked!
Details can be found here: https://docs.docker.com/build/ci/github-actions/
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论