You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket Pipeline推送镜像至Docker Hub遇问题求助

问题描述

我编写了如下的bitbucket-pipelines.yml文件,在通过Bitbucket Pipeline将镜像推送至Docker Hub的过程中遇到问题:

image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          name:
            Build And Publish To Azure
          services:
            - docker
          script:
            #Authenticate on Azure
            - docker login -u $AZURE_USER -p $AZURE_PASS myticket.azurecr.io
            #Build Docker Image
            - docker build -t myticket.azurecr.io/myticket .
            #Push to Azure
            - docker push myticket.azurecr.io/myticket
      - step:
          name: 
            Push To Docker Hub
          services:
            - docker
          script:
            - docker logout
            #Authenticate on Docker
            #The below says Error: Cannot perform an interactive login from a non TTY device
            - docker login --username $DOCKER_HUB_USERNAME --password-stdin $DOCKER_HUB_PASSWORD
            #The below says invalid username or password
            # - echo $DOCKER_HUB_PASSWORD | docker login --username $DOCKER_HUB_USERNAME --password-stdin
            #Build Docker Image
            - docker build -t myticket.azurecr.io/myticket .
            #Push to Docker Hub
            - docker push isaachats/myticket:latest

执行Docker Hub登录命令时遇到两个问题:

  • 直接用--password-stdin参数时报错:Error: Cannot perform an interactive login from a non TTY device
  • 用echo管道传递密码时提示:invalid username or password
    尝试添加hub.docker.com到登录命令中也没解决问题,请问哪里操作有误?
错误分析与解决方法

1. 第一个登录命令的用法错误

docker login --password-stdin的作用是从标准输入读取密码,不是把密码作为命令参数直接跟在后面。你当前的写法把$DOCKER_HUB_PASSWORD当成了Docker仓库地址,Docker会尝试连接这个地址并弹出交互式登录,而Pipeline环境是非TTY的,所以报错。正确写法是把密码通过管道传给这个命令。

2. "无效用户名或密码"的可能原因

  • 环境变量未正确配置:检查Bitbucket仓库的「Repository settings > Repository variables」里,DOCKER_HUB_USERNAME和DOCKER_HUB_PASSWORD是否正确设置,注意变量名大小写,且密码不要有多余空格。
  • Docker Hub账号开启了两步验证:如果开启了两步验证,不能直接用登录密码,需要在Docker Hub账号设置里生成个人访问令牌(Personal Access Token),用这个令牌代替密码作为DOCKER_HUB_PASSWORD的值。
  • echo命令的换行符问题:有些环境下echo会自动添加换行符,导致密码多了一个换行,无法验证。可以用echo -n来避免添加换行。

3. 镜像标签错误

你在Push到Docker Hub的步骤里,build的镜像标签还是Azure容器注册表的地址myticket.azurecr.io/myticket,但push的是isaachats/myticket:latest,这会导致Docker找不到对应的本地镜像,应该修改build命令的标签为Docker Hub的仓库名:

docker build -t isaachats/myticket:latest .

修正后的完整Pipeline脚本

image: atlassian/default-image:2

pipelines:
  branches:
    master:
      - step:
          name: Build And Publish To Azure
          services:
            - docker
          script:
            # 登录Azure容器注册表
            - docker login -u $AZURE_USER -p $AZURE_PASS myticket.azurecr.io
            # 构建并推送Azure镜像
            - docker build -t myticket.azurecr.io/myticket .
            - docker push myticket.azurecr.io/myticket
      - step:
          name: Push To Docker Hub
          services:
            - docker
          script:
            - docker logout
            # 登录Docker Hub(用-n避免换行符)
            - echo -n $DOCKER_HUB_PASSWORD | docker login --username $DOCKER_HUB_USERNAME --password-stdin
            # 构建Docker Hub镜像
            - docker build -t isaachats/myticket:latest .
            # 推送至Docker Hub
            - docker push isaachats/myticket:latest

内容的提问来源于stack exchange,提问作者Isaac Hatilima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:15:33