mac休眠后,docker服务会挂掉

mac休眠后再唤醒的话,docker启的服务都会挂掉,然后要挨个启起来,很是麻烦,有大神知道怎么设置吗?

阅读 11.3k
4 个回答

hhh, 昨天我也遇到疑似 mac 合上盖子后导致 docker 工作异常的情况. 而且异常得特别深邃.

容器看似运行正常, 服务看似正常. 但__容器里的 Unix 时间戳是错的!__, 这导致一个连锁 bug, 排查了整整一下午, 终于才发现, 容器里获取到的时间戳被冻结在了合上盖子的那一刻....

噢对了, docker 设计上是有自动重启选项的, 创建容器的时候设置–restart为合适的值即可. 它有好几个选项. 始终重启/非手动退出后重启/不重启

在看到这个问题之前我都没遇到过类似问题,然后就在我看过这个问题之后……

我有一台 MacBook Pro 长期放在公司用,每天下班后都会合盖,从来没遇到过 Docker 自动挂起的问题。所以第一次看到这个问题的时候我的内心是拒绝的。

结果这两天我在家里的 MacBook 上,就神奇地遇到了同样的问题。休眠短时间没问题,但是如果过夜,第二天 docker ps 就空空如也。我一开始没在意,以为只是忘了启动服务,当我第二次在时间线上看到这个问题时,才注意到。

然后我特意测试了两天,果然,经过长时间休眠后,Docker 就会自动挂起,所有服务都退出了。我检查了所有设置和版本都没有问题。

我尝试搜索了一下,发现还是有不少人报告类似问题的,不过都集中在 macOS 10.10。GitHub 有很多讨论,但似乎没有确定的结论。而且这些讨论时间都比较久,距现在一年以上了,而我的 macOS 和 Docker for Mac 都是最新版的,所以这些讨论帮助不大。

唯一比较有帮助的是有人提供了一个禁止 Mac 进入睡眠的方法,但是太暴力了我不喜欢就没有尝试。

不过这个方法给了我一个灵感。

因为我另一台 MacBook Pro 用了这么久都没问题,这台 MacBook 也是最近才遇到问题,两台 Mac 之间系统和软件版本、设置、images、container 等都是一样的,唯一的区别是,最近我用 MacBook 外接了显示器,所以用了 Apple 官方的 USB-C 转 HDMI 转接器

也就是说,在这几天中,我的 MacBook 都不是直接接电源的,而是通过转接线接入电源和 HDMI。所以昨晚我做了一个试验,特意拔掉转接器,将电源直接接上 Mac。就在写这个回答前,离我昨晚合盖差不多20个小时,我检查了一下 docker ps,你猜怎么着?

一切正常。

发现这一点后我就来写这个答案了。我不知道如何解释这个现象,我只知道,我的 MacBook 直接接电源就没问题,否则长时间睡眠后 docker 会挂起。

我猜可能和 MacBook 的电源管理有关系?我的 MacBook 的设置中唯一的区别就是电源供电时打开 Power Nap,电池供电时不打开。我可以确定,通过转接器接入电源,Mac 可以正确识别是电源供电,但是谁知道在睡眠时会不会有什么 bug 呢?

希望对题主有帮助。

试着用守护进程开启下服务。docker run -d。首先确保不是docker挂掉了,我这里用docker-compose up -d开启服务的,休眠后再打开服务正常运行的。应该也不是mac节能设置的原因。

docker-composer管理容器很方便

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题