我本地下载了一个 MySql 镜像,想安装官方的。docker pull mysql 后它老自动把本地的给装上去了。
删除本地的mysql docker rmi -f mysqldocker images 查看确实没了,但是
再次 docker pull mysql,发现安装的还是之前的那个……
怎么跳过本地的 MySql ,安装官方的镜像啊? 谢谢
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
是不是有什么容器正在使用这个 mysql 镜像?或者你是否重新
docker tag过这个镜像?或者使用其它版本的mysql镜像?或者在使用基于debian:jessie的镜像?要知道镜像并非单一文件,而是存储层的集合。当你执行
docker rmi -f mysql的时候,实际上是删除mysql:latest这个tag,因此第一行一般是Untagged: mysql:latest。接下来的逻辑是,如果没有其它
tag指向该存储层,则会真实删除该存储层,然后继续查询下一层的存储层是否还有人在使用,没有继续删除,直到某一层发现还有容器或者镜像依赖该存储层,那么就停止删除。所以当你执行docker rmi的时候,可以观察一下出现了多少个Deleted: sha256: ...,这就是删除了多少层,其它的并未删除。那么假如你重新
docker tag了这个mysql镜像,那么当你执行docker rmi的时候,只会执行untag的操作,而不会真的删除存储层。又或者系统有其它镜像是基于相同的基础镜像
debian:jessie的,那么docker rmi也只会删到这一层就停止了,以后每次pull也是从这层开始。同样,这种分层存储的概念也会影响你的
docker pull。 当你执行docker pull的时候,会查看官方docker:latest的每一层的校验值,然后到本地比对,看看哪些已经存在,如果存在就不重复pull,直接使用当前存储层,如果不存在则pull新的。拿刚才的假如你重新
docker tag的例子,如果你之前重新tag过该mysql:latest镜像,那么docker rmi实际上没有删除该镜像,而再次docker pull mysql的时候,发现所有存储层本地都有,那必然不需要再次 pull,直接将最顶层tag为mysql:latest即可。这种情况无需担心,也不必强迫重新下载,因为sha256sum可以确保镜像文件和官网的一致性。所以你的问题需要看具体情况是什么来说。一般来说,在生产环境不建议使用
latest标签,而是明确指定版本,这样才可能升级维护。