svogt
(Sascha Vogt)
1
您好,
我正在使用 discourse_docker 仓库中的 launcher 脚本来运行一个内部 Discourse 实例。我想将重启策略从 always 永久更改为 unless-stopped,以便在进行操作系统升级/重启时能够保持 Docker 容器停止状态。
我可以看到重启策略是 launcher 脚本中的一个变量,但如何才能在新容器构建时最好地保留此设置?它应该可以通过“launcher rebuild”以及通过 /admin/upgrade 使用 docker_manager 来工作。
提前感谢,
问候
.sascha
1 个赞
pfaffman
(Jay Pfaffman)
2
我记不起有其他人问过这个问题,而且我也没有看到明显的方法。我认为你最好的办法是执行
./launcher destroy app
如果你想让它保持停止状态,然后用以下命令重新启动它
./launcher start app
这将销毁容器,因此你在容器内所做的任何更改(例如来自 docker_manager 的升级)都将被销毁。
哦,但这里有一个:
tl;dr:每次重建后执行 docker update --restart=unless-stopped app。
2 个赞
svogt
(Sascha Vogt)
3
是的,我知道
我现在正在进行 Docker 更新。但我担心在下次重建时会忘记它。因此,我才问如何使其持久化。\n\n另一种选择是直接编辑启动脚本,并希望在拉取时不会有太多 rebase 冲突 
pfaffman
(Jay Pfaffman)
4
我唯一遇到过启动后重启问题的时机是,当我从 app.yml 切换到 web_only.yml 时,忘记销毁 app 容器。我经常进行 docker 升级和重启,而不会出现自动启动问题。供参考,在过去 5 年里我没有看到其他人对此感到担忧。除非你有什么我不知道的情况,否则也许不用担心?
svogt
(Sascha Vogt)
5
今天的问题是我想要进行全新安装,因为我有一些奇怪的 2.4.0-betaXYZ 版本无法自行更新。我在另一个虚拟机上进行了测试,进行了全新安装并恢复了备份到 2.7.12,一切正常(还将数据容器拆分成了 redis 和 postgres)。
现在主服务器仍然运行着旧的 Ubuntu 和旧的 Docker,所以我想:
- 备份
- 关闭 Discourse
- 进行操作系统升级操作,不用担心 Discourse,包括几次重启
- 进行全新安装
- 恢复备份
我只是想保持容器不运行,并且不立即删除它们,因为我不确定是否还需要它们中的任何东西,而我在测试时可能已经忘记了。我只是觉得,除非停止(unless-stopped)对我来说是完美的重启策略,因为它能确保容器在重启后自动启动,除非你手动停止它们。通常这正是我想要的,所以我想为什么不尝试让它永久生效呢。
如果不可能,也不是什么大问题。
我只会更新 Docker(或者如果我经常忘记,就通过 cron 每 5 分钟更新一次 Docker ;))。