Docker 拉取未经授权的 - Docker 和 Github 操作

Docker pulling unauthorized - Docker and Github actions

我的部署脚本如下:

  - name: Log in to GitHub Packages
    run: echo ${PERSONAL_ACCESS_TOKEN} | docker login ghcr.io -u ${{ secrets.NAMESPACE }} --password-stdin
    env:
      PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}

  - name: Build and deploy images on DigitalOcean
    env:
      SSH_AUTH_SOCK: /tmp/ssh_agent.sock
    run: |
      scp  -o StrictHostKeyChecking=no -r ./.env ./docker-compose_prod.yml root@${{ secrets.DIGITAL_OCEAN_IP_ADDRESS }}:/app
      ssh -o StrictHostKeyChecking=no root@${{ secrets.DIGITAL_OCEAN_IP_ADDRESS }} << 'ENDSSH'
        cd /app
        source .env
        docker login ghcr.io -u $NAMESPACE -p $PERSONAL_ACCESS_TOKEN
        docker pull $WEB_IMAGE
        docker pull $NGINX_IMAGE
        docker-compose -f docker-compose.prod.yml up -d
      ENDSSH

我得到的错误是

Pulling web (ghcr.io/***/testdriver_tutorial/web:ba673356fe8a9abcf25700b8a12619e414bbaf7c)... Head https://ghcr.io/v2/***/testdriver_tutorial/web/manifests/ba673356fe8a9abcf25700b8a12619e414bbaf7c: unauthorized

登录到GitHub Packages步骤显示已经成功

更新

我刚刚在数字海洋水滴上做了 docker login ghcr.io -u $NAMESPACE -p $PERSONAL_ACCESS_TOKEN,它要求输入密码。

如何关闭此密码验证,使其仅使用 PERSONAL_ACCESS_TOKEN

问题不在于 docker pull,问题在于 docker 登录之前执行的命令,即 source .env

        run: |
          scp  -o StrictHostKeyChecking=no -r ./.env ./docker-compose.prod.yml root@${{ secrets.DIGITAL_OCEAN_IP_ADDRESS }}:/app
          ssh -o StrictHostKeyChecking=no root@${{ secrets.DIGITAL_OCEAN_IP_ADDRESS }} << 'ENDSSH'
            cd /app
            source .env
            docker login ghcr.io -u $NAMESPACE -p $PERSONAL_ACCESS_TOKEN

source .env 中有一个特殊字符 - 特别是在 Django 密钥中。 GitHub 动作继续到下一步。我不确定 unauthorized error 是如何产生的,但修复了 source .env 中的语法使其登录。