restart-policy 的持久化配置

您好,

我正在使用 discourse_docker 仓库中的 launcher 脚本来运行一个内部 Discourse 实例。我想将重启策略从 always 永久更改为 unless-stopped,以便在进行操作系统升级/重启时能够保持 Docker 容器停止状态。

我可以看到重启策略是 launcher 脚本中的一个变量,但如何才能在新容器构建时最好地保留此设置?它应该可以通过“launcher rebuild”以及通过 /admin/upgrade 使用 docker_manager 来工作。

提前感谢,
问候
.sascha

1 个赞

我记不起有其他人问过这个问题,而且我也没有看到明显的方法。我认为你最好的办法是执行

  ./launcher destroy app

如果你想让它保持停止状态,然后用以下命令重新启动它

  ./launcher start app

这将销毁容器,因此你在容器内所做的任何更改(例如来自 docker_manager 的升级)都将被销毁。

哦,但这里有一个:

tl;dr:每次重建后执行 docker update --restart=unless-stopped app

2 个赞

是的,我知道 :wink: 我现在正在进行 Docker 更新。但我担心在下次重建时会忘记它。因此,我才问如何使其持久化。\n\n另一种选择是直接编辑启动脚本,并希望在拉取时不会有太多 rebase 冲突 :wink:

我唯一遇到过启动后重启问题的时机是,当我从 app.yml 切换到 web_only.yml 时,忘记销毁 app 容器。我经常进行 docker 升级和重启,而不会出现自动启动问题。供参考,在过去 5 年里我没有看到其他人对此感到担忧。除非你有什么我不知道的情况,否则也许不用担心?

今天的问题是我想要进行全新安装,因为我有一些奇怪的 2.4.0-betaXYZ 版本无法自行更新。我在另一个虚拟机上进行了测试,进行了全新安装并恢复了备份到 2.7.12,一切正常(还将数据容器拆分成了 redis 和 postgres)。

现在主服务器仍然运行着旧的 Ubuntu 和旧的 Docker,所以我想:

  1. 备份
  2. 关闭 Discourse
  3. 进行操作系统升级操作,不用担心 Discourse,包括几次重启
  4. 进行全新安装
  5. 恢复备份

我只是想保持容器不运行,并且不立即删除它们,因为我不确定是否还需要它们中的任何东西,而我在测试时可能已经忘记了。我只是觉得,除非停止(unless-stopped)对我来说是完美的重启策略,因为它能确保容器在重启后自动启动,除非你手动停止它们。通常这正是我想要的,所以我想为什么不尝试让它永久生效呢。

如果不可能,也不是什么大问题。:slight_smile: 我只会更新 Docker(或者如果我经常忘记,就通过 cron 每 5 分钟更新一次 Docker ;))。