• 请不要在回答技术问题时复制粘贴 AI 生成的内容
a663
V2EX  ›  程序员

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

  •  
  •   a663 · Nov 22, 2018 via Android · 8990 views
    This topic created in 2904 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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