如何将对docker-compose.yml所做的更改实施到分离的运行容器

如何将对docker-compose.yml所做的更改实施到分离的运行容器,docker,docker-compose,Docker,Docker Compose,项目当前正通过以下命令在后台运行: docker-compose up -d 我需要对他们的docker compose.yml进行两项更改: 添加一个新容器 更新以前的容器以具有指向新容器的链接 更改后: 注意这个“docker compose up-d将完成这项工作 输出应该是 > docker-compose up -d Starting container1 ... done > docker-compose up -d container1 is up-to-dat

项目当前正通过以下命令在后台运行:

docker-compose up -d
我需要对他们的
docker compose.yml
进行两项更改:

  • 添加一个新容器
  • 更新以前的容器以具有指向新容器的链接
更改后:


注意这个“
docker compose up-d
将完成这项工作

输出应该是

> docker-compose up -d
Starting container1 ... done

> docker-compose up -d
container1 is up-to-date
Creating container2 ... done

作为一个旁注,DOCKER编写不是真正用于生产的。您可能需要考虑DOCKER群。

< P>如果您只运行<代码> DOCKER组成-D/CODE >,它会注意到新的容器和更改的配置并应用它们。 但是:

(不破坏任何东西)

有许多设置只能在容器启动时设置。如果更改这些设置,Docker Compose将删除并重新创建受影响的容器。例如,链接是仅启动的选项,因此重新运行
Docker Compose up-d
将删除并重新创建
web
容器

这破坏了Mongo DB容器…我不能这样做…再次

为此添加
卷:
选项,以便将数据存储在容器外部。您可以将其保存在命名卷中,可能由Docker Compose管理,这有一些优点,但主机系统目录可能更难意外破坏。您必须删除并重新启动容器才能更改此选项。但请注意例如,如果MongoDB中有一个安全更新,并且您需要一个新映像,那么您还必须删除并重新启动容器

您在这里的理想状态是:

  • 实际数据库(如MongoDB容器)将数据存储在命名卷或主机目录中
  • 应用程序(如Rails容器)不在本地存储任何内容,可以自由销毁和重新创建
  • 所有代码都在Docker映像中,这些映像始终可以从源代码管理中重建
  • 根据需要使用卷来插入配置文件和提取日志

如果您丢失了整个
/var/lib/docker
目录(这种情况会发生!),您实际上不应该丢失任何状态,尽管您可能会导致一些应用程序停机。

使用卷是有意义的,也是一个很好的想法,尽管我认为在容器中存储DB没有任何意义(至少在生产中).我同意我应该能够自由销毁/重新创建容器。谢谢。
> docker-compose up -d
Starting container1 ... done

> docker-compose up -d
container1 is up-to-date
Creating container2 ... done
db:
    image: mongo
    restart: always