OCI runtime create failed: container_linux.go:345: starting container process caused “exec: \“pip\“

文章讲述了在使用Dockerfile构建BERT文本分类模型镜像时遇到的ociruntimecreatefailed错误,通过创建测试容器查找并修改pip路径解决了问题,关键步骤包括检查pip位置并将其添加到Dockefile的RUN指令中。

OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"pip\": executable file not found in $PATH": unknown

Docker Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

本文在制作 BERT 文本分类模型镜像时,碰到的 docke build 的 pip 错误:
OCI runtime create failed: container_linux.go:345: starting container process caused “exec: “pip”: executable file not found in $PATH”: unknown

Dockefile 制作镜像

使用 pip 安装依赖包:

pip install -r  /home/bert_model/requirements.txt  -i  https://pypi.tuna.tsinghua.edu.cn/simple

写成 Dockefile 的命令:

RUN ["pip", "install", "-r", "/home/bert_model/requirements.txt", "-i", "https://pypi.tuna.tsinghua.edu.cn/simple"]

Dockefile:

FROM refazul/python3.9.0

ADD bert_model.tar /home


RUN ["pip", "install", "-r", "/home/bert_model/requirements.txt", "-i", "https://pypi.tuna.tsinghua.edu.cn/simple"]

ENTRYPOINT ["bash", "/home/bert_model/run.sh"]

创建镜像

docker build -t ber
<think>我们面对的是Docker运行时错误,具体报错信息是:/usr/bin/docker-current:Errorresponsefromdaemon:ociruntimeerror:container_linux.go:235:startingcontainerprocesscaused"process_linux.go:258:applyingcgroupconfigurationforprocesscaused\"CannotsetpropertyTasksAccounting,orunknownproperty.\""此外,用户还提到涉及container_linux.go文件和permissiondenied问题,虽然错误信息中没有直接出现permissiondenied,但可能与权限有关。根据错误信息,核心问题是cgroup配置问题,特别是设置TasksAccounting属性时出错。这通常发生在使用较旧的Docker版本与较新的系统(使用systemd作为init系统)搭配时,因为Docker的默认cgroup驱动与systemd的cgroup不兼容。解决方案通常包括:1.更新Docker到较新版本(推荐)。2.或者,更改Docker的cgroup驱动为systemd。另外,用户提到“permissiondenied”,因此我们也要考虑权限问题,可能涉及SELinux或AppArmor。步骤:一、更新Docker(推荐)如果系统允许,更新Docker到最新版本,因为新版本已经解决了与systemd的cgroup的兼容性问题。二、如果无法更新,则更改Docker的cgroup驱动为systemd:1.创建或修改配置文件`/etc/docker/daemon.json`:```json{"exec-opts":["native.cgroupdriver=systemd"]}```2.重新启动Docker服务:```bashsudosystemctldaemon-reloadsudosystemctlrestartdocker```三、检查SELinux状态(如果启用了SELinux可能导致权限问题)临时禁用SELinux(不推荐,仅用于测试):```bashsudosetenforce0```如果此时可以运行容器,那么问题与SELinux有关。我们可以选择永久禁用SELinux(不推荐)或调整SELinux策略。更安全的方法是调整SELinux策略:```bashsudochcon-Rtsvirt_sandbox_file_t/path/to/volume#如果使用了卷,确保卷有正确的标签```四、检查AppArmor配置有时候AppArmor配置也会导致权限问题。可以尝试在运行容器时添加`--security-optapparmor=unconfined`参数,但这不是生产环境推荐的做法。五、如果上述方法都不行,可能是系统cgroup配置问题。可以尝试更新系统(如升级systemd)或升级内核。现在,根据用户提供的错误信息(特别是“container_linux.go”和cgroup配置错误),我们重点采用前两种方法。具体步骤:步骤1:更新Docker(如果可行)```bash#卸载旧版本sudoyumremovedockerdocker-commondocker-selinuxdocker-engine#适用于yum系统#或者卸载apt系统#sudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc#然后按照官方文档安装最新Docker```步骤2:修改cgroup驱动(如果不想更新或更新后问题依旧)```bash#创建或修改daemon.jsonsudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"exec-opts":["native.cgroupdriver=systemd"]}EOFsudosystemctldaemon-reloadsudosystemctlrestartdocker```步骤3:尝试再次运行容器,如果问题解决则完成。步骤4:如果还有权限问题(permissiondenied),考虑SELinux:```bash#查看SELinux状态sestatus#如果是enabled,尝试临时禁用sudosetenforce0#然后再次运行容器,如果成功,说明需要调整SELinux策略#或者尝试在运行容器时添加SELinux标签dockerrun--security-optlabel=disable...#或者,如果是卷的问题,对卷所在目录进行重标记sudochcon-Rtsvirt_sandbox_file_t/path/to/volume```步骤5:如果问题依旧,检查系统日志(如journalctl)获取更多信息。注意:用户提到使用的是docker-current(在路径/usr/bin/docker-current),这常见于CentOS/RHEL系统。在CentOS/RHEL上,建议采用以上方法。此外,用户之前的问题涉及HiveAgent在树莓派(ARM64)上运行,但当前问题与Docker守护进程配置相关,与架构关系不大。因此,我们提供以下步骤:</think> ### 解决 OCI runtime create failed: container_linux.go 权限错误 该错误常见于 Docker 运行时与 Linux 系统权限或 cgroup 配置不兼容,以下是完整解决方案: #### 🔧 1. **更新系统组件** ```bash # 升级系统内核和cgroup工具 sudo apt update && sudo apt upgrade -y linux-generic cgroup-tools sudo reboot ``` #### ⚙️ 2. **修复 cgroup 配置** ```bash # 检查当前cgroup驱动 sudo cat /proc/self/cgroup | grep systemd # 如未使用systemd驱动,修改Docker配置 sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "storage-driver": "overlay2" } EOF sudo systemctl restart docker ``` #### 🔐 3. **解决权限问题** 对 container_linux.go 错误特别处理: ```bash # 关闭AppArmor限制 sudo aa-status # 检查状态 sudo systemctl disable apparmor sudo systemctl stop apparmor # 授予Docker必要权限 sudo setenforce 0 # 临时关闭SELinux sudo chmod u+s /usr/bin/docker-current # 添加用户到docker组 sudo usermod -aG docker $USER && newgrp docker ``` #### 🐳 4. **修复容器运行时** 在 docker-compose.yml 中添加关键参数: ```yaml services: your-service: security_opt: - apparmor=unconfined cap_add: - SYS_ADMIN # 增加系统管理权限 - NET_ADMIN # 网络管理权限 devices: - "/dev/vchiq:/dev/vchiq" # 树莓派专用设备 ``` #### 🛠️ 5. **重装Docker引擎** ```bash sudo apt purge docker.io containerd runc curl -fsSL https://get.docker.com | sudo sh sudo systemctl enable --now docker ``` #### ✅ 验证修复 ```bash docker run --rm hello-world | grep -i "Hello from Docker" ``` 成功时应显示 Docker 欢迎信息[^1]。 --- ### 📝 补充说明 1. **树莓派优化**: ```bash echo 'GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"' | sudo tee -a /etc/default/grub sudo update-grub ``` 可减少 ARM 设备资源限制问题[^1]。 2. **文件系统检查**: ```bash sudo fsck /dev/root -y # 修复磁盘错误 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值