我有一个应用程序在多个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_1
,myapp_data_1
和myapp_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
container_name: app
。 - lukeausdocker-compose
默认使用 yml 文件的文件夹名称作为项目名称,并将该名称作为所有容器名称的前缀。您可以使用docker-compose -p custom_name
指定项目名称。不过,我不确定这是否会强制重复使用具有相同名称的现有容器。如果您有不想覆盖的重要数据,请先在不重要的容器上尝试测试此功能。 - Xiongbing Jin