docker 启动容器报错及解决办法

本文详细介绍了如何解决Docker启动容器时报错“Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused process_linux.go:258: applying cgroup configuration for process causedCannot set property TasksAccounting”。解决方案包括更新YUM,卸载旧版Docker,安装最新版Docker,并指定了安装特定版本的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker 启动容器报错:Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "process_linux.go:258: applying cgroup configuration for process caused \"Cannot set property TasksAccounting

docker 是通过 yum install docker安装的,搜了一把,原来是因为linux与docker版本的兼容性问题。那就卸载旧版本安装最新版docker。(yum也需要更新)

联网在线安装docker更高版本

日常工作的环境,docker1.13.1版本完全可以满足工作需求了,若需要求其它版本,则指定docker的yum源去指定安装更高版本,(注意:安装docker时,若此前有旧版本,要先删除后再安装,yum -y remove docker和rm -rf /var/lib/docker, 否则会有冲突报错)
1   yum -y  upgrade    -----升级

2   yum -y install wget   ----安装wget

3   yum -y install yum-utils   ----安装yum-config-manager工具和安装相关的存储驱动服务

4  sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo    -----添加docker仓库文件docker-ce.repo仓库

5  yum install  docker-ce    -----安装docker-ce算是客户端工具吧

6  yum list docker-ce --showduplicates|grep "doc"|sort -r   -----查看相关docker-ce仓库里的docker版本有哪些

7  yum -y install docker-ce-18.06.3.ce-3.el7   -----选择安装的docker版本

8  docker version  -----查看docker版本

9  systemctl start docker  -----启动docker 

或:sudo systemctl start dockersudo systemctl enable docker    ------启动 并加入开机启动


 
### Docker 容器退出代码 139 的原因与解决方案 容器退出代码为 139 表示容器中的进程由于接收到 `SIGSEGV`(段错误)信号而终止。这通常是由于程序尝试访问未分配的内存或越界访问导致的[^1]。以下是一些可能的原因及解决方法: #### 1. 程序崩溃 如果容器内的应用程序存在 bug 或逻辑错误,可能会导致段错误。需要检查容器运行的应用程序代码是否存在潜在问题。可以通过在主机上直接运行相同的命令来复现问题并调试。 #### 2. 内存不足 容器可能因为内存不足而触发段错误。可以尝试增加 Docker 的内存限制。例如,在启动容器时添加以下参数: ```bash docker run --memory="4g" --memory-swap="8g" ... ``` 这将为容器分配 4GB 的内存和 8GB 的交换空间[^1]。 #### 3. 不兼容的依赖项 如果容器中安装的库或工具版本不兼容,也可能导致段错误。例如,引用[2]提到的 ROS 版本问题。确保使用的 ROS 版本与项目需求一致,并且所有依赖项均已正确安装。对于 micro-ROS 静态库生成,需确认 Dockerfile 和 Makefile 中的 ROS 版本是否正确配置[^2]。 #### 4. 编译问题 如果容器内的应用程序是通过编译生成的,可能存在编译选项不当或优化级别过高导致的问题。尝试降低编译优化级别,例如从 `-O3` 改为 `-O0` 或 `-O1`,并在重新构建后测试容器行为。 #### 5. 调试工具 为了进一步定位问题,可以使用调试工具如 GDB 来捕获段错误的具体位置。以下是使用 GDB 的基本步骤: ```bash docker run -it --entrypoint /bin/bash <image_name> apt-get update && apt-get install gdb -y gdb <executable> run ``` 当程序崩溃时,GDB 将显示崩溃的堆栈信息,帮助定位问题来源。 #### 示例代码:调整 Docker 启动参数 以下是一个调整内存限制并启用调试模式的示例脚本: ```bash docker run --rm --memory="4g" --memory-swap="8g" -it \ --entrypoint /bin/bash <image_name> ``` --- ### 总结 退出代码 139 通常由段错误引起,可能是程序错误、内存不足或依赖项不兼容等原因造成的。通过检查程序代码、调整内存限制、验证依赖项版本以及使用调试工具,可以有效解决问题[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值