首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新注册表中的docker镜像

更新注册表中的docker镜像
EN

Stack Overflow用户
提问于 2016-09-06 23:00:27
回答 3查看 35.4K关注 0票数 10

我曾经将我的docker镜像推送到我的私有注册表,但当我想再次推送该镜像时,我收到了以下消息:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
docker tag proj1 localhost.com:5000/proj/proj1 
docker push localhost.com:5000/proj/proj1
EN

回答 3

Stack Overflow用户

发布于 2016-09-07 00:00:42

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

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

代码语言:javascript
复制
docker tag proj1:latest localhost.com:5000/proj/proj1:latest 
docker push localhost.com:5000/proj/proj1:latest

旧版本的Docker正在抱怨,因为你试图用现有的标签:latest覆盖现有的镜像。

快速而棘手的解决方案是尝试

代码语言:javascript
复制
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上提到了它的原因。

票数 16
EN

Stack Overflow用户

发布于 2016-09-07 00:02:28

问题出在您的docker tag命令中,获取以下响应:

来自后台进程的最新错误响应: Conflict: Tag

已设置为镜像2bcc77ac3ef5f5ce0442d9cae3652c0464b8f266db9ccd65b1638aadf60ebc39,如果要替换它,请使用-f选项

这是因为您的本地计算机上已经有一个带有该标记的映像。如果要从较旧的图像中删除标签,则应使用docker rmi命令。记住要确保旧的镜像仍然有一个或多个标签(例如,带有内部版本号),否则它实际上将被删除。

为了完成一个示例,假设您的本地计算机具有以下图像:

代码语言:javascript
复制
REPOSITORY                       TAG                 IMAGE ID
localhost.com:5000/proj/proj1    0.1                 2bcc77ac3ef5
localhost.com:5000/proj/proj1    latest              2bcc77ac3ef5
<none>                           <none>              d52cb651fb7a

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

您要做的第一件事是从现有镜像中删除最新的标签,只留下0.1标签:

代码语言:javascript
复制
docker rmi localhost.com:5000/proj/proj1:latest

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

代码语言:javascript
复制
REPOSITORY                       TAG                 IMAGE ID
localhost.com:5000/proj/proj1    0.1                 2bcc77ac3ef5
<none>                           <none>              d52cb651fb7a

现在,您可以将版本标签和最新标签应用于新镜像:

代码语言:javascript
复制
docker tag d52cb651fb7a localhost.com:5000/proj/proj1:0.2
docker tag d52cb651fb7a localhost.com:5000/proj/proj1:latest

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

代码语言:javascript
复制
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

现在你可以做推送了:

代码语言:javascript
复制
docker push localhost.com:5000/proj/proj1:latest
票数 5
EN

Stack Overflow用户

发布于 2021-11-11 16:09:55

如果您正在处理maven项目,那么像我一样,您可能会错过在进行更改后再次构建jar。

对我来说,起作用的是

代码语言:javascript
复制
mvn clean package

然后构建docker

代码语言:javascript
复制
docker build --no-cache -t image_name

然后对接标签和对接推送。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39352186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档