是什么样的操作能让 Docker 容器挂掉

2020-07-10 08:35:36 +08:00
 jss
最近上线个小项目,运行一个月后 容器半夜挂掉,由于是半夜没有拿出日志,重新创建容器后继续运行。想问问可能的原因?
6728 次点击
所在节点    Docker
54 条回复
594duck
2020-07-10 10:12:09 +08:00
@zy445566 Redis 和 Nginx 你用 Docker 我也就算了。Mysql 用 Docker,一我敬你是英雄,二我为你公司的未来感到担忧。你动态迁移 MYSQL,除非 你有存储,不然打死我也不信。

至于动态迁移 Redis 的 Docker,我朋友公司用过半年后是死也不弄了。5G 的 Redis 你迁一下那酸爽。
est
2020-07-10 10:17:35 +08:00
其实容器这个概念很具有迷惑性。其实就是宿主机上一陀进程树被 cgroups netns 给包装了一下而已。那什么操作会导致 docker 容器挂掉呢?那就是最顶上那个进程挂掉了。
copycoder
2020-07-10 10:35:31 +08:00
刚开始用 docker 的小白,我不是很懂你们在说什么,目前对我来说还是很方便的,不用配置环境
Livid
2020-07-10 10:38:12 +08:00
日志要弄进 ELK,有问题的时候先看 ELK 。
zy445566
2020-07-10 10:43:25 +08:00
@594duck
首先我不是和你争,我也不屑于和你争。
你要觉的你是对的那你就是对的。
每个人不同时间站的高度不一样,不同高度不同见解。
你现在觉得是对的,未必将来你还会认为是对的。我现在觉得你错了,未必将来还觉得你错。
你现在太激动了,言语里攻击性很强,会显得你很幼稚。
danhahaha
2020-07-10 10:59:23 +08:00
随即从服务器上抽出一块硬盘,仔细阅读上面的文字说明。
InkAndBanner
2020-07-10 11:08:33 +08:00
@594duck 是不断重启然后拖死的嘛
liprais
2020-07-10 11:09:36 +08:00
@594duck 你跟 php 转 node.js 的较啥劲
前者一个文件一把梭,后者开个项目至少五万个依赖,他是得用 docker,不然依赖都装不上
Latin
2020-07-10 11:17:09 +08:00
一次打包到处运行它不香吗?
真觉得有拉挂有问题,先看自己容器内部的容错机制。
集群化就上 K8S
黑化它干嘛,不然为啥这么多人鼓吹!
blless
2020-07-10 11:19:27 +08:00
docker 是 docker,但是 docker 真正价值在于容器编排,也就是 k8s 。单节点部署爱用啥就用啥,楼上喷 docker 的维护过大规模部署再喷也不迟
rockyou12
2020-07-10 11:21:51 +08:00
@594duck 5 个 G 的 redis 迁移会有问题???我有点怀疑运维水平。数据库用 docker 搞什么主从备份确实会由于官方就没有好的方案导致特别特别复杂
dilu
2020-07-10 11:27:45 +08:00
dockerd 也是 systemd 拉起来的 建议先看 /var/log/message 日志

如果 dockerd 出现异常这里应该会有日志

如果这个日志正常 可以参考 1L,docker 容器 pid 为 1 的进程 也就是主进程的 id 是跟 docker 容器的生命周期关联的

这也就是为什么 Dockerfile 最后的 CMD 一定是一个阻塞的命令

建议从主进程开始排查
spcharc
2020-07-10 11:28:40 +08:00
主进程挂掉最多就是退出容器,楼上那么多人说整个机器都挂了是啥情况? kernel panic ?
我还没遇到整个机器挂的情况
594duck
2020-07-10 11:49:56 +08:00
@rockyou12 自动迁移到处漂,你感受一下。

最后想通了就固定在几个地方一想我还要啥 Docker 直接启不就得了。排错什么都简单。
594duck
2020-07-10 11:55:24 +08:00
@InkAndBanner 影响到内核了,然后 Docker 那可怜的隔离机制从不告诉人家,”我如果内核被影响就会拖死宿主机一起死“

结果就酸爽的不得了。


还有理论上 Docker 既然 效率这么高就应该跑裸金属服务器,比如一台 256G 的裸金属服务器全跑 Docker 至少可以跑上 50 个服务吧,但是其实你基本看不到有人用裸金属服务器跑 Docker 的。因为一死死整机,所以大家还是在虚拟机上跑 Docker.那 Docker 吹了半天的隔离性在哪里呢?尴尬呀。

但是你是可以看到一个裸金属服务器上跑十来个 JAVA 的。人家自己搞死自己,绝不祸害别人。
choury
2020-07-10 12:11:57 +08:00
@594duck #34 docker 把内核搞挂了肯定不是 docker 对问题,内核有问题就升级内核,自己没有内核团队就交给 redhat/canonical 搞
并且你要是需要隔离性,请把 runtme 从 runc 换成 kata,在这个架构里面,具体底层 runtime 是什么不是重点,重要对是上层对编排能力
594duck
2020-07-10 12:41:38 +08:00
@choury 没有自己的内核 团队就交给 xxx 搞,为什么这么复杂,直接不用不就好了。明明虚拟机 能够搞一步到位搞完事情,一定要弄一堆与之无关的东西出来。我就问你,搞 Docker 解决了什么根本问题。然后你看看是不是解决了我们没有 CI/CD 我们通过 Docker 解决了 CI/CD 问题。

至于 Runtime 从 Runc 改为 kata,又回到了像你说的没有自己的内核 团队就交给 xxx 来搞一样的逻辑,我这个不行就换那个,那个也有缺点就换这个。Docker 网络不好用,那我们上 SDN,Docker 存储不好用,那我们弄个统一存储,Docker 这个不行,我们弄这个,Docker 那个不行,我们弄那个。。最后 Docker 和个虚拟机没二样了。你那个 Kata 不就并不多是一个内核级 Qemu 么,然后还要再搞一堆东西上去。

那还是回到根本问题,我什么都不用,就用原来的技术架构跑,有什么问题。你能够说服自己么。

我说国内搞 Docker 的公司 8 成是用来解决 CI/CD 你信不信,另外 2 成里有 1 成是解决消息总线之类的框架问题(K8s),最后只有一成的头部企业是我真的有需要

你承认不承认,一个月里销毁几万次 Docker 其实就是 UP/DOWN 了几万次程序而已。
ming7435
2020-07-10 13:02:28 +08:00
工作 10 年了,还没在生产环境用过 docker,感觉跟不上潮流了
choury
2020-07-10 13:04:51 +08:00
kata 就是虚拟机,按你的想法,内核有问题你跑虚拟机照样能把母机跑挂,有什么本质区别么
choury
2020-07-10 13:05:14 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/688737

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX