诶,今晚因为领导要我加一个应用的 ci 给开发和测试环境,就在本地搭建了一个私有 docker registry,搭建完成后得把开发节点的 docker 配置修改后重启。 就 system ctl docker restart (正确做法应该是先 stop 再 start ),结果某些应用没有正确退出,只是容器退出了,就导致 restart 结束后部分 container 没跑起来,还有部分跑起来了但访问不到。 然后这里还有最重要的是 gitlab 服务在这里。
说一下公司现状,刚来公司不久,之前没有运维,也没人做任何的运维规划,各种乱象,比如 gitlab 搭建在开发节点(只有一台开发节点),然后开发节点的很多 container 退出后不删除的大把,还有就是有些没用的服务乱起,各种。 之前有提议说想把 gitlab 迁移,领导没反馈,就先留着,想等以后在做了。
然后自己也一直不想去理开发环境,结果这次 ci 的任务就给搞出问题了。 然后,由于不确定哪些应用有没有正确起来的,就和领导说明天一大早计划迁移 gitlab,清掉开发节点的所有 container,让开发重新部署一遍,貌似现在感觉氛围不太对了。 好尴尬啊,自己的锅,跑不了了
之前一直觉得开发环境哪天肯定会崩,没曾想是自己搞崩的……还是自己不够细心,很自责
1
Dingo 2018-11-22 22:47:19 +08:00
楼主加油,好人一生平安
|
2
alvin666 2018-11-22 22:48:26 +08:00 via Android
restart 不是先 stop 再 start 吗?...
就提示不也是先 stop 成功再 start 成功吗 |
3
zhongyiio 2018-11-22 22:49:22 +08:00 via Android
同情,要是 container 没有配 restart:always 就瞎了
|
4
johnniang 2018-11-22 22:51:14 +08:00
只要数据还在都不是事儿
|
5
a663 OP @johnniang 数据还在,然后得麻烦开发一遍,还需要群里沟通,头儿有点不太开心,我表示理解他的心情😢😢
|
6
duola 2018-11-22 22:56:39 +08:00
千万不要把数据弄丢了。
|
7
a663 OP @zhongyiio 有些配了有些没陪,开发自己玩的,然后容器的使用也比较粗糙,他们是先把容器停了,在把代码文件在容器内替换,然后重启
|
12
alvin666 2018-11-22 23:05:24 +08:00 via Android
学到了...以后用 systemctl stop &&systemctl start
|
15
xuanbg 2018-11-22 23:29:28 +08:00
没启动的容器 start 一下不行吗?
|
16
momocraft 2018-11-22 23:30:14 +08:00
restart 不可以 stop+start 可以是为什么
|
17
afc 2018-11-22 23:32:23 +08:00
我不知道你的容器里面跑了什么,在我看来只要 MySQL 这些数据库能启动,不可能程序会因为非正常退出就无法启动。还有,你重启了 docker,你只要看 docker ps -a 里面 Exited 时间一致的那一批 container,就是你重启前在跑的 container,至于不能启动的,慢慢查日志。
|
18
woodfish 2018-11-23 00:40:01 +08:00
容器看制作者质量,有些满足幂等性的随挺随起,有些不满足幂等的挺了再起就又重新初始化了。用容器前先测试它的幂等性
|
19
mason961125 2018-11-23 00:53:35 +08:00
很好奇为什么这些人写 Dockerfile 的时候不考虑万一容器崩了重启的情况?而且好像似乎也没有做数据持久化?
|
20
chuanzhangACE 2018-11-23 00:53:35 +08:00 via Android
@a663 我们 docker 数据也是直接挂载的,代码通过 jinkens 替换,所以想请教一下你们现在 docker 使用细节,你说的 docker 使用粗糙指的什么
|
21
likuku 2018-11-23 01:03:33 +08:00
看起来也没有标准操作流程手册之类 [ 如此这般,责任每个人都有啦 ]...虽然你们是 dev 也干了 ops 的活...
|
22
ywgx 2018-11-23 08:10:08 +08:00 via Android
典型的大部分互联网企业特点,运维管理,部署结构混乱
|
23
18660103530 2018-11-23 08:24:14 +08:00
我也搞蹦过,只要数据卷还在就好。另外我那次搞蹦的是 docker 服务器直接没了,但是 daemon.json 还在,重新安装了 docker 服务容器全部自己回来了。
|
24
bigbyto 2018-11-23 09:12:52 +08:00 via iPhone
人在江湖飘,难免有背锅的时候。感觉楼主还是蛮有担当的,过去就好了
|
25
saltxy 2018-11-23 09:19:55 +08:00
@chuanzhangACE 我们是 jenkins 构建代码打包到 image 里,push image 到自建的 registry,生产服务器直接移除老的 container 启动新的 container
|
26
lincolnhuang 2018-11-23 09:41:05 +08:00
现在运维就是一个背锅的,感觉 LZ 以后还会背。。所以现在运维难招啊,没人肯做
|
27
zhouzm 2018-11-23 10:05:50 +08:00
做好数据持久化,使用 docker-compose,容器崩了怕什么?
我经常 docker-compose down && docker-compose up -d |
28
buhi 2018-11-23 10:32:08 +08:00
mount 代码是什么骚操作...
|
29
jwdlh 2018-11-23 10:46:28 +08:00
不请运维好歹请个备份啊
|
30
okwork 2018-11-23 11:09:51 +08:00
一台机器上容器太多了,互相依赖的话,真的很慌。像比较重的服务,还是单独拎出来独立部署吧
|
31
anubu 2018-11-23 11:36:30 +08:00
容器不是虚拟机。实际应用中,对于容器,启动、停止、重启是小概率事件,创建、删除、重建是大概率事件。在容器化一个应用时,主要考虑的是能不能方便的在其他 docker 主机上重建这个应用容器。这应该就是我们使用容器的目的吧,方便的部署和迁移。
一点经验: 1. 不要使用 docker run 来创建和启动一个容器,而是使用 docker-compose。使用 yaml 文件定义的容器更清晰,更容易被复制重建。 2. 充分考虑需要数据持久化的应用数据,显式的指定挂载卷路径并做好备份。 3. 不要在容器中修改非持久化保存的数据。 |
32
march13th 2018-11-23 17:38:40 +08:00
楼主所说的环境,很符合目前我当下的环境...没有运维,我(开发) 自己搞的一套 docker 测试环境和生产环境,然后也是比较乱。
|