更新registry中的泊坞窗图像

我把我的docker图像推到了我的私人registry中,但是当我想再次推送那个图像时,我收到了这些消息:

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 

我每次运行这些命令来更新registry中的图像:

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

短:升级到最新的docker版本(首选)或使用-t标签选项。

你的命令是一样的,如果你会发出以下两个命令:

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

较早版本的Docker正在抱怨,因为您尝试用现有标记覆盖现有图像:latest

快速和肮脏的解决scheme是尝试

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

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

不过,我build议将docker升级到版本> = 1.12.0。 在那里,-t选项不可用,不再需要,因为图像将一直被replace。 这就是为什么-f选项没有在官方文档中描述的原因,而是在Docker弃用引擎特性页面上提到的。

问题是你的docker tag命令,得到这个回应:

来自守护进程的错误响应:Conflict:Tag latest已经设置为image 2bcc77ac3ef5f5ce0442d9cae3652c0464b8f266db9ccd65b1638aadf60ebc39,如果你想replace它,请使用-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