在注册表中更新docker镜像

时间:2016-09-06 15:00:27

标签: docker docker-compose dockerfile docker-machine docker-registry

我将我的docker镜像推送到我的私人注册表一次,但是当我想再次推送该图像时,我收到了这些消息:

06-Sep-2016 10:54:10    Error response from daemon: Conflict: Tag latest is already set to image 2bcc77ac3ef5f5ce0442d9cae3652c0464b8f266db9ccd65b1638aadf60ebc39, if you want to replace it, please use -f option
The push refers to a repository [localhost.com:5000/proj/proj1] (len: 1)
06-Sep-2016 10:54:10    2bcc77ac3ef5: Image already exists
06-Sep-2016 10:54:10    2bcc77ac3ef5: Image already exists
06-Sep-2016 10:54:10    4f3b96c826b8: Image already exists
06-Sep-2016 10:54:11    84c030e02a98: Image already exists
06-Sep-2016 10:54:11    c7282372eb99: Image already exists
06-Sep-2016 10:54:11    1b449d63ca4e: Image already exists

我每次都运行这些命令来在注册表中更新我的图像:

docker tag proj1 localhost.com:5000/proj/proj1 
docker push localhost.com:5000/proj/proj1

2 个答案:

答案 0 :(得分:6)

简短:升级到最新的泊坞窗版本(首选)或使用-t代码选项。

您的命令与发出以下两个命令的命令相同:

docker tag proj1:latest localhost.com:5000/proj/proj1:latest 
docker push localhost.com:5000/proj/proj1:latest

旧版本的Docker抱怨,因为您尝试使用现有标记:latest覆盖现有图像。

快速和肮脏的解决方案是尝试

docker tag -f proj1 localhost.com:5000/proj/proj1 
docker push -f localhost.com:5000/proj/proj1

这将允许覆盖旧版本Docker上的现有图像localhost.com:5000/proj/proj1:latest

但是,我建议将docker升级到版本> = 1.12.0。在那里,-t选项不再可用,不再需要,因为图像将始终被替换。这就是为什么official documentation上没有描述-f选项的原因,而是在Docker Deprecated Engine Features page上提及。

答案 1 :(得分:2)

问题在于你的docker tag命令,得到了这个回复:

  

来自守护程序的错误响应:冲突:标记最新已设置为图像2bcc77ac3ef5f5ce0442d9cae3652c0464b8f266db9ccd65b1638aadf60ebc39,如果要替换它,请使用-f选项

这是因为本地计算机上已有一个带有该标记的图像。如果要从旧映像中删除标记,则应使用docker rmi命令。请务必确保较旧的图片仍然包含一个或多个标记(例如,使用内置版本号),否则实际上会将其删除。

要完成示例,请假设您的本地计算机具有以下图像:

REPOSITORY                       TAG                 IMAGE ID
localhost.com:5000/proj/proj1    0.1                 2bcc77ac3ef5
localhost.com:5000/proj/proj1    latest              2bcc77ac3ef5
<none>                           <none>              d52cb651fb7a

请注意,前两行是同一图像的两个不同标记;第三行是您想要标记的新图像。

您要做的第一件事就是从现有图片中删除最新标记,只留下 0.1 标记:

docker rmi localhost.com:5000/proj/proj1:latest

这将为您留下以下图片列表:

REPOSITORY                       TAG                 IMAGE ID
localhost.com:5000/proj/proj1    0.1                 2bcc77ac3ef5
<none>                           <none>              d52cb651fb7a

您现在可以将版本标记和最新标记应用于新图像:

docker tag d52cb651fb7a localhost.com:5000/proj/proj1:0.2
docker tag d52cb651fb7a localhost.com:5000/proj/proj1:latest

这将为您提供以下图像列表:

REPOSITORY                       TAG                 IMAGE ID
localhost.com:5000/proj/proj1    0.1                 2bcc77ac3ef5
localhost.com:5000/proj/proj1    0.2                 d52cb651fb7a
localhost.com:5000/proj/proj1    latest              d52cb651fb7a

现在你可以做推动:

docker push localhost.com:5000/proj/proj1:latest