使用`docker-compose`重复利用容器

10

我有一个应用程序在多个Docker容器中运行,这些容器由docker-compose定义。从我的用户角度来看一切都很正常,docker-compose ps的输出如下:

       Name                Command           State     Ports
------------------------------------------------------------
myuser_app_1    /config/bootstrap.sh   Exit 137
myuser_data_1   sh                     Exit 0
myuser_db_1     /run.sh                Exit 143

现在我正在尝试使用supervisord运行docker-compose up(请参见下面的supervisord.conf相关部分),但问题是容器现在的命名已经变为myapp_app_1myapp_data_1myapp_db_1,也就是说它们是从头开始创建的,以前的所有自定义内容都丢失了。
我尝试重命名容器,但它会出现错误,表示已经有一个带有该名称的容器。
问:是否有一些方法强制docker-compose重用现有的容器而不是基于它们各自的镜像创建新容器?

supervisord.conf

...
[program:myapp]
command=/usr/local/bin/docker-compose
    -f /usr/local/app/docker-compose.yml up
redirect_stderr=true
stdout_logfile=/var/log/myapp_container.log
stopasgroup=true
user=myuser

如果您的每个应用程序只需要一个容器,则可以在docker-compose.yml文件中使用container_name: app - lukeaus
1
docker-compose 默认使用 yml 文件的文件夹名称作为项目名称,并将该名称作为所有容器名称的前缀。您可以使用 docker-compose -p custom_name 指定项目名称。不过,我不确定这是否会强制重复使用具有相同名称的现有容器。如果您有不想覆盖的重要数据,请先在不重要的容器上尝试测试此功能。 - Xiongbing Jin
1个回答

9

Compose将一直重用容器,只要它们的配置没有改变。

如果容器中有任何状态,您需要将该状态放入卷中。容器应该是暂时的,您应该随时能够销毁它们并重新创建它们而不会丢失任何内容。

如果您需要初始化某些内容,建议在Dockerfile中进行操作,以便保留在镜像中。


我终于成功地通过在docker-compose.yml中指定“volumes_from”来重复使用数据卷。感谢您的提示。 - fernandezcuesta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接