【发布时间】:2020-07-29 18:00:24
【问题描述】:
我遇到了 docker-compose 最令人沮丧的问题:
我将一个新图像推送到 gitlab,在服务器上运行 docker compose,然后.. 旧图像运行。
- 我已经重启了docker
- 我已经清理了所有东西(所有图像和所有容器)
- 我已经完成了 docker-compose pull follow by up
- 我已经尝试过 docker-compose --force-recreate
- 我已擦除 /var/lib/docker/image
而且.. 我仍然得到一个带有旧图像的容器。 我什至不知道它从哪里得到图像,因为我已经用 docker rmi 擦除了它们......
现在,如果我执行 docker run gitlabimagepath,新图像可以正常运行。 因此,在同一台计算机上,问题具体发生在 docker-compose 上,而不是 docker 上。
docker-compose pull 正在获取具有正确摘要的图像。 当我使用 docker-compose 运行它并获取旧图像时,或者我使用 docker run 运行时,检查会给出相同的图像 sha256。所以看起来有一些旧容器一直在为 docker-compose 复活并且永远不会被重建
我想不出比“这到底是什么?”更好的问题了
这个类似的问题docker-compose keeps using old image content 没有任何帮助。
docker compose 非常基础:
version: '3.3'
services:
leech:
container_name: services_leech
image: registry.gitlab.com/...:latest
restart: unless-stopped
volumes:
- volume-leech:/app
networks:
- default
volumes:
volume-leech:
networks:
default:
external:
name: leech-network
所以,一个永久存储卷,就是这样。
【问题讨论】:
-
您可以编辑问题以添加您的
docker-compose.yml文件吗?例如,您是否有覆盖图像内容的卷? -
@DavidMaze,刚刚添加了信息
-
对
/app使用命名卷会导致这种情况——命名卷的内容优先于映像中的内容,并且由于卷用于保存用户数据,因此其内容不会被修改为底层图像发生变化。您是否正在尝试以这种方式保存特定的数据单元,或者该卷的某些其他功能需求? -
@DavidMaze 是的,该应用程序正在捕获实时数据并将其存储在文件中,然后这些文件最终会上传到存储中。所以我想我可以通过这种方式保存当天的文件,同时能够更新应用程序。我现在理解的是 /app 文件夹同时用于代码和数据,所以我想我应该使用另一个名称,对吧?
标签: docker docker-compose centos