如何禁止使用 docker-compose up 重新创建 docker 容器

Posted

技术标签:

【中文标题】如何禁止使用 docker-compose up 重新创建 docker 容器【英文标题】:How to forbid recreating docker containers with docker-compose up 【发布时间】:2021-12-29 09:24:00 【问题描述】:

我需要你的帮助!

我这周开始使用 docker,为一个新的 Django 项目启动了所有容器。在这个项目中有几个数据库,python、django web server + redis、celery等。这些都由独立的docker容器提供服务,由docker-compose up命令启动。

这是我的问题:当我在控制台中输入docker-compose up 时,它会启动所有服务。然后我需要为每个数据库恢复我的数据库转储(大约需要一个小时)。但是当我为 docker-compose 使用 pycharm 工具时,它会重新创建一些容器。它还使用我的所有数据重新创建我所有的 postgres 数据库!

有时它不会重新创建容器,我可以完成我的工作,但如果我做错了 - 那么 docker-compose 会删除我的数据库!我已经厌倦了恢复它们!

有没有办法保护容器不被擦除,禁止重新创建我的 postgres 容器?

PS:我也尝试将 postgres 容器导出到 .tar 文件,但是当我将其导入回来时,数据库洞察容器还可以,并且容器导入比从 sql 恢复数据更快,但是 docker 映像的元数据不同,所以我不能使用它。

请给我任何想法)

【问题讨论】:

Docker 容器是单个进程的包装器;你试图问,“我可以阻止一个进程退出吗”,不,你真的不能。如果您在重新启动时丢失了数据库数据,那么您可能需要安排将其保存在某个地方;参见例如How to persist data in a dockerized postgres database using volumes。删除和重新创建容器是非常正常的。 【参考方案1】:

尝试使用卷来存储您的数据。卷可以在容器重新创建后保留数据。 https://docs.docker.com/storage/volumes/

【讨论】:

以上是关于如何禁止使用 docker-compose up 重新创建 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

docker-compose up 容器开始排序

如何在系统启动时运行 docker-compose up -d?

使用`docker-compose run`时无法调试,但`docker-compose up`有效

docker-compose up与docker-compose up -d

`docker-compose up`超时使用UnixHTTPConnectionPool

Docker-compose up时报错: