关键在于理清“先有镜像、再打标签、最后登录上传”逻辑链:docker tag为镜像添加含仓库地址和语义化版本的正式名称(如registry.cn-hangzhou.aliyuncs.com/myteam/myapp:v1.2.0),不复制内容;docker login针对具体仓库地址认证;docker push必须使用tag生成的完整名称,三步缺一不可。
要用好 Docker 镜像标记和推送,关键不是记住命令顺序,而是理清“先有镜像、再打标签、最后登录上传”这个逻辑链。本地没镜像,或标签格式不对,push 肯定失败;没登录,权限就卡在第一步。
标记(docker tag)本质是给镜像“起一个带地址的正式名字”,不是复制也不是重命名。它不改变镜像内容,只新增一条指向它的引用。
myapp:dev 推到阿里云杭州区域私有仓库:docker tag myapp:dev registry.cn-hangzhou.aliyuncs.com/myteam/myapp:v1.2.0
latest;目标标签省略时也默认为 latest
v1.2.0)或 Git 提交短哈希(如 git-abc123),避免单独依赖 latest
登录(docker login)是针对具体仓库地址的操作,不是全局一次登录永久有效。
docker login(回车后输入账号密码)docker login registry.example.com 或 docker login registry.cn-hangzhou.aliyuncs.com
~/.docker/config.json,后续 push 才能通过认证推送(docker push)操作的对象,必须是之前用 docker tag 明确生成的那个完整名称。
docker push registry.cn-hangzhou.aliyuncs.com/myteam/myapp:v1.2.0
docker push myapp:v1.2.0 —— 这会默认推到 Docker Hub,且镜像名不匹配推送失败通常就三类原因,按顺序检查效率最高:
docker images 确认列表里有你 push 命令里写的那个全名(含仓库地址)docker login 仓库地址 再试;检查 config.json 是否包含对应 registry 的 auth 记录