如何使用 docker-compose 在不停机的情况下重建和更新容器?

新手上路,请多包涵

我非常喜欢使用 docker-compose。

例如。在我的服务器上,当我想通过细微的更改来更新我的应用程序时,我只需要 git pull origin master && docker-compose restart ,完美运行。

但有时,我需要重建(例如,我添加了一个 npm 依赖项,需要再次运行 npm install )。

在这种情况下,我做 docker-compose build --no-cache && docker-compose restart

我希望这是:

  • 创建我的容器的新实例
  • 停止现有容器(在新容器完成构建后)
  • 开始新的
  • 可选择删除旧的,但这可以手动完成

但在实践中,它似乎又重新启动了前者。

这是预期的行为吗?

如何处理重建并在构建 启动新的?

也许我错过了一个特定的命令?或者拥有它有意义吗?

原文由 Augustin Riedinger 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.8k
2 个回答

从手动 docker-compose 重启

如果您对 docker-compose.yml 配置进行更改,这些更改将不会在运行此命令后反映。

你应该能够做到

$docker-compose up -d --no-deps --build <service_name>

--no-deps 不会启动链接服务。

原文由 denov 发布,翻译遵循 CC BY-SA 3.0 许可协议

问题是 restart 会重启你当前的容器,这不是你想要的。

例如,我只是这样做了

  • 更改其中一张图片的 docker 文件
  • 调用 docker-compose build 构建镜像
  • 调用 docker-compose down 1和 docker-compose up
    • docker-compose restart 在这里不起作用
    • 使用 docker-compose start 也不起作用

老实说,我不完全确定你需要先做一个 down ,但这应该很容易检查。 1底线是您需要调用 up 。您将看到未更改图像的容器重新启动,但对于更改后的图像,您将看到 recreating

与仅调用 up --build 相比,这样做的优点是您可以在重新启动之前先查看构建过程。

1:来自评论; down 不需要,你可以打电话 up --build 。 Down 有一些“不利”方面,包括可能对您的(体积)数据造成破坏。

原文由 Nanne 发布,翻译遵循 CC BY-SA 3.0 许可协议