You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 14.04服务器Docker容器启动崩溃问题求助(含Jenkins场景)

解决Ubuntu 14.04 LTS上Docker容器启动报错"write init-p: broken pipe"的问题

我之前维护老版本Ubuntu服务器时也碰到过一模一样的错误,尤其是搭配Jenkins使用Docker的时候。既然你已经通过docker run --rm -i -a stdin -a stdout ubuntu echo 1验证了问题和Dockerfile、Jenkins配置无关,那问题肯定出在Docker本身或者系统底层配置上,给你几个亲测有效的解决方案:

  • 升级到兼容Ubuntu 14.04的Docker版本
    Ubuntu 14.04默认仓库里的Docker版本过于老旧,很多新的runtime特性不支持,容易出现这类管道错误。建议卸载旧版本后安装Docker CE 18.06.x系列(这是官方支持Ubuntu 14.04的最后几个稳定版本):

    # 卸载旧版Docker组件
    sudo apt-get remove docker docker-engine docker.io containerd runc
    # 添加Docker官方源(适配trusty版本)
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable"
    sudo apt-get update
    # 安装指定兼容版本
    sudo apt-get install docker-ce=18.06.3~ce~3-0~trusty
    
  • 检查并升级系统内核
    Docker对内核版本有最低要求(至少3.10以上),虽然Ubuntu 14.04默认内核是3.13,但部分定制化服务器的内核可能存在bug。先查看当前内核版本:

    uname -r
    

    如果版本过低或存在已知问题,可以升级到xenial系列的稳定内核:

    sudo apt-get install linux-image-generic-lts-xenial
    sudo reboot
    
  • 重置Docker runtime组件
    有时候runc或者containerd这类runtime组件会出现异常,尝试重启Docker服务并重新安装runc:

    # Ubuntu 14.04用upstart管理服务,重启命令如下:
    sudo service docker restart
    # 重新安装runc组件
    sudo apt-get install --reinstall runc
    
  • 调整AppArmor安全配置
    Ubuntu 14.04默认启用AppArmor,偶尔会和Docker的容器初始化流程冲突。可以临时降低AppArmor对Docker的限制试试:

    sudo aa-complain docker
    

    如果有效,可以修改Docker的默认配置文件/etc/default/docker,添加以下配置后重启服务:

    DOCKER_OPTS="--security-opt apparmor:unconfined"
    

内容的提问来源于stack exchange,提问作者M1ke

火山引擎 最新活动