【问题标题】:Reuse containers with `docker-compose`使用 `docker-compose` 重用容器
【发布时间】:2016-08-13 20:41:05
【问题描述】:

我有一个应用程序在docker-compose 定义的多个 Docker 容器上运行。我的用户一切正常,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
  • docker-compose 默认使用 yml 文件的文件夹名称作为项目名称,并将该名称作为所有容器名称的前缀。您可以使用docker-compose -p custom_name 指定项目名称。我不确定这是否会强制重用具有相同名称的现有容器。如果您有不想覆盖的重要数据,请先尝试在不重要的容器上进行测试。

标签: docker docker-compose supervisord


【解决方案1】:

撰写will always reuse containers as long as their config hasn't changed

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

如果您需要初始化某些内容,我会在 Dockerfile 中进行,以便将其保存在映像中。

【讨论】:

  • 我终于设法通过在docker-compose.yml 中指定volumes_from 来重用数据卷。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 2022-11-13
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2020-09-24
相关资源
最近更新 更多