gpt4 book ai didi

Docker 组合重用卷

转载 作者:IT老高 更新时间:2023-10-28 21:26:05 25 4
gpt4 key购买 nike

我正在尝试创建一个新的 Docker 镜像,该镜像不再使用来自正在运行且使用镜像的容器中的卷。这些卷是使用 docker-compose 文件而不是 Dockerfile 创建的。问题是,当我通过新的 docker-compose.yml 文件启动一个新容器时,它仍然映射了卷。我仍然需要保留这些卷和使用它们的原始容器/图像。另外,如果可能的话,我想继续使用相同的 docker 镜像,只需添加一个新版本,或者 :latest。这是我使用的步骤:

现有图像的新版本:

docker commit <image id> existingImage:new-version

从当前运行的容器创建一个新的镜像:

docker commit <Image ID> newimage

创建没有定义卷的新 docker-compose.yml 并使用不同的项目名称运行 docker-compose

docker-compose -p <new project name> 

不使用 docker-compose 运行,只需使用 docker run:

 docker run -d -p 8093:80 <img>:<version>

任何时候我运行这些的任意组合时,卷仍然是从原始图像映射的。所以我的问题是,如何从曾经映射过卷但我不再想使用卷的图像创建容器?

编辑:我尝试过的其他事情:

  • 停止容器,移除容器,重启 docker,再次运行 docker compose。不走运。

编辑 2:决定从图像重新开始。使用基础镜像,启动一个容器,其中包含更新的 docker compose 文件,该文件使用现在不相关的镜像。运行 docker-compose -f up -d -> 即使镜像没有(也从来没有)映射任何卷,并且当前 docker-compose.yml 文件没有映射文件,仍然映射了这些相同的卷。看起来 docker-compose 缓存了为项目映射了哪些卷。

在 docker-compose 中搜索缓存选项后,我偶然发现了这篇文章:How to get docker-compose to always re-create containers from fresh images?这似乎解决了缓存图像而不是容器缓存卷的问题

最佳答案

根据另一个 SO 帖子,我试图做的事情是不可能的。为了将来引用,不能将卷附加到镜像,然后再决定将其删除。必须创建一个没有卷的新镜像。引用: How to remove configure volumes in docker images

关于Docker 组合重用卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47043466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com