V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a663
V2EX  ›  程序员

因为重启 docker,服务起不来,把开发环境搞崩了,严严实实背了口锅

  •  
  •   a663 · 2018-11-22 22:43:19 +08:00 via Android · 7473 次点击
    这是一个创建于 2185 天前的主题,其中的信息可能已经有所发展或是发生改变。

    诶,今晚因为领导要我加一个应用的 ci 给开发和测试环境,就在本地搭建了一个私有 docker registry,搭建完成后得把开发节点的 docker 配置修改后重启。 就 system ctl docker restart (正确做法应该是先 stop 再 start ),结果某些应用没有正确退出,只是容器退出了,就导致 restart 结束后部分 container 没跑起来,还有部分跑起来了但访问不到。 然后这里还有最重要的是 gitlab 服务在这里。

    说一下公司现状,刚来公司不久,之前没有运维,也没人做任何的运维规划,各种乱象,比如 gitlab 搭建在开发节点(只有一台开发节点),然后开发节点的很多 container 退出后不删除的大把,还有就是有些没用的服务乱起,各种。 之前有提议说想把 gitlab 迁移,领导没反馈,就先留着,想等以后在做了。

    然后自己也一直不想去理开发环境,结果这次 ci 的任务就给搞出问题了。 然后,由于不确定哪些应用有没有正确起来的,就和领导说明天一大早计划迁移 gitlab,清掉开发节点的所有 container,让开发重新部署一遍,貌似现在感觉氛围不太对了。 好尴尬啊,自己的锅,跑不了了

    之前一直觉得开发环境哪天肯定会崩,没曾想是自己搞崩的……还是自己不够细心,很自责

    32 条回复    2018-11-23 17:38:40 +08:00
    Dingo
        1
    Dingo  
       2018-11-22 22:47:19 +08:00
    楼主加油,好人一生平安
    alvin666
        2
    alvin666  
       2018-11-22 22:48:26 +08:00 via Android
    restart 不是先 stop 再 start 吗?...
    就提示不也是先 stop 成功再 start 成功吗
    zhongyiio
        3
    zhongyiio  
       2018-11-22 22:49:22 +08:00 via Android
    同情,要是 container 没有配 restart:always 就瞎了
    johnniang
        4
    johnniang  
       2018-11-22 22:51:14 +08:00
    只要数据还在都不是事儿
    a663
        5
    a663  
    OP
       2018-11-22 22:55:58 +08:00 via Android
    @johnniang 数据还在,然后得麻烦开发一遍,还需要群里沟通,头儿有点不太开心,我表示理解他的心情😢😢
    duola
        6
    duola  
       2018-11-22 22:56:39 +08:00
    千万不要把数据弄丢了。
    a663
        7
    a663  
    OP
       2018-11-22 22:58:59 +08:00 via Android
    @zhongyiio 有些配了有些没陪,开发自己玩的,然后容器的使用也比较粗糙,他们是先把容器停了,在把代码文件在容器内替换,然后重启
    a663
        8
    a663  
    OP
       2018-11-22 22:59:36 +08:00 via Android
    @alvin666 至少 stop 失败了你可以知道的
    a663
        9
    a663  
    OP
       2018-11-22 23:00:09 +08:00 via Android
    @duola 没丢没丢,做有备份
    zhongyiio
        10
    zhongyiio  
       2018-11-22 23:03:35 +08:00 via Android
    @a663 看起来你们需要梳理一下构建和部署流程了,乱搞出事迟早的
    a663
        11
    a663  
    OP
       2018-11-22 23:04:37 +08:00 via Android
    @zhongyiio 很想推,真的很想,但有些事情不是我在把控😌😌😌
    alvin666
        12
    alvin666  
       2018-11-22 23:05:24 +08:00 via Android
    学到了...以后用 systemctl stop &&systemctl start
    wweir
        13
    wweir  
       2018-11-22 23:19:30 +08:00 via Android
    @a6 骚操作,挺容器替换文件,这是手动找那个很深的目录替换?
    a663
        14
    a663  
    OP
       2018-11-22 23:28:05 +08:00 via Android
    @wweir 代码是 mount 进去的,尴尬
    xuanbg
        15
    xuanbg  
       2018-11-22 23:29:28 +08:00
    没启动的容器 start 一下不行吗?
    momocraft
        16
    momocraft  
       2018-11-22 23:30:14 +08:00
    restart 不可以 stop+start 可以是为什么
    afc
        17
    afc  
       2018-11-22 23:32:23 +08:00
    我不知道你的容器里面跑了什么,在我看来只要 MySQL 这些数据库能启动,不可能程序会因为非正常退出就无法启动。还有,你重启了 docker,你只要看 docker ps -a 里面 Exited 时间一致的那一批 container,就是你重启前在跑的 container,至于不能启动的,慢慢查日志。
    woodfish
        18
    woodfish  
       2018-11-23 00:40:01 +08:00
    容器看制作者质量,有些满足幂等性的随挺随起,有些不满足幂等的挺了再起就又重新初始化了。用容器前先测试它的幂等性
    mason961125
        19
    mason961125  
       2018-11-23 00:53:35 +08:00
    很好奇为什么这些人写 Dockerfile 的时候不考虑万一容器崩了重启的情况?而且好像似乎也没有做数据持久化?
    chuanzhangACE
        20
    chuanzhangACE  
       2018-11-23 00:53:35 +08:00 via Android
    @a663 我们 docker 数据也是直接挂载的,代码通过 jinkens 替换,所以想请教一下你们现在 docker 使用细节,你说的 docker 使用粗糙指的什么
    likuku
        21
    likuku  
       2018-11-23 01:03:33 +08:00
    看起来也没有标准操作流程手册之类 [ 如此这般,责任每个人都有啦 ]...虽然你们是 dev 也干了 ops 的活...
    ywgx
        22
    ywgx  
       2018-11-23 08:10:08 +08:00 via Android
    典型的大部分互联网企业特点,运维管理,部署结构混乱
    18660103530
        23
    18660103530  
       2018-11-23 08:24:14 +08:00
    我也搞蹦过,只要数据卷还在就好。另外我那次搞蹦的是 docker 服务器直接没了,但是 daemon.json 还在,重新安装了 docker 服务容器全部自己回来了。
    bigbyto
        24
    bigbyto  
       2018-11-23 09:12:52 +08:00 via iPhone
    人在江湖飘,难免有背锅的时候。感觉楼主还是蛮有担当的,过去就好了
    saltxy
        25
    saltxy  
       2018-11-23 09:19:55 +08:00
    @chuanzhangACE 我们是 jenkins 构建代码打包到 image 里,push image 到自建的 registry,生产服务器直接移除老的 container 启动新的 container
    lincolnhuang
        26
    lincolnhuang  
       2018-11-23 09:41:05 +08:00
    现在运维就是一个背锅的,感觉 LZ 以后还会背。。所以现在运维难招啊,没人肯做
    zhouzm
        27
    zhouzm  
       2018-11-23 10:05:50 +08:00
    做好数据持久化,使用 docker-compose,容器崩了怕什么?

    我经常 docker-compose down && docker-compose up -d
    buhi
        28
    buhi  
       2018-11-23 10:32:08 +08:00
    mount 代码是什么骚操作...
    jwdlh
        29
    jwdlh  
       2018-11-23 10:46:28 +08:00
    不请运维好歹请个备份啊
    okwork
        30
    okwork  
       2018-11-23 11:09:51 +08:00
    一台机器上容器太多了,互相依赖的话,真的很慌。像比较重的服务,还是单独拎出来独立部署吧
    anubu
        31
    anubu  
       2018-11-23 11:36:30 +08:00
    容器不是虚拟机。实际应用中,对于容器,启动、停止、重启是小概率事件,创建、删除、重建是大概率事件。在容器化一个应用时,主要考虑的是能不能方便的在其他 docker 主机上重建这个应用容器。这应该就是我们使用容器的目的吧,方便的部署和迁移。
    一点经验:
    1. 不要使用 docker run 来创建和启动一个容器,而是使用 docker-compose。使用 yaml 文件定义的容器更清晰,更容易被复制重建。
    2. 充分考虑需要数据持久化的应用数据,显式的指定挂载卷路径并做好备份。
    3. 不要在容器中修改非持久化保存的数据。
    march13th
        32
    march13th  
       2018-11-23 17:38:40 +08:00
    楼主所说的环境,很符合目前我当下的环境...没有运维,我(开发) 自己搞的一套 docker 测试环境和生产环境,然后也是比较乱。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   954 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.