解决 docker run 报错 oci runtime error

在部署新服务器运行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 caused \"Cannot set property TasksAccounting

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

0.通过uname -r命令查看你当前的内核版本

uname -r

1.使用 root 权限登录 Centos。确保 yum 包更新到最新。

sudo yum update

2.卸载旧版本(如果安装过旧版本的话)

sudo yum remove docker  docker-common docker-selinux docker-engine

3.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

4.设置yum源

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5.可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

6.安装docker

sudo yum install docker-ce

7.启动并加入开机启动

sudo systemctl start docker
sudo systemctl enable docker

8.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

经过以上一通操作,pull 一下镜像再执行docker run命令,问题解决。

### 解决方案 当遇到 `docker run` 报错提示 `nginx: executable file not found in $PATH` 时,通常是因为镜像中未正确安装 Nginx 或者路径配置不正确。以下是可能的原因分析以及解决方案: #### 原因分析 1. **基础镜像问题**: 如果使用的自定义镜像并未基于官方的 Nginx 镜像构建,则可能导致 Nginx 可执行文件缺失。 2. **路径问题**: 即使 Nginx 已经被安装到容器中,但如果其二进制文件不在 `$PATH` 环境变量指定的目录下,也会引发此错误。 3. **Dockerfile 构建问题**: 在构建过程中可能存在误操作,例如忘记复制必要的文件或设置入口点。 --- #### 解决方法 ##### 方法一:使用官方 Nginx 镜像 推荐直接拉取并使用官方维护的 Nginx 镜像,该镜像已经预装了 Nginx 并设置了正确的环境变量和路径[^5]。 ```bash docker pull nginx:latest docker run --name mynginx -d nginx ``` 如果需要定制化功能,可以在官方镜像基础上创建自己的 Dockerfile。 --- ##### 方法二:验证 PATH 和可执行文件位置 进入容器内部检查 `/usr/sbin/nginx` 是否存在,并确认当前用户的 `$PATH` 包含该路径: ```bash docker exec -it <container_id> sh echo $PATH which nginx ls /usr/sbin/nginx ``` 如果没有找到 Nginx 文件或者路径不对,则需重新调整 Dockerfile 的构建逻辑。 --- ##### 方法三:修改 Dockerfile 添加 Nginx 安装步骤 如果正在自行编写 Dockerfile,请确保其中包含了完整的 Nginx 安装指令。以下是一个示例 Dockerfile: ```dockerfile FROM ubuntu:latest # 更新包管理器索引 RUN apt-get update && \ apt-get install -y nginx && \ rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /etc/nginx # 将主机上的配置文件拷贝至容器内 COPY ./nginx.conf . # 暴露端口 EXPOSE 80 # 启动 Nginx 进程 CMD ["nginx", "-g", "daemon off;"] ``` 通过这种方式可以保证 Nginx 正确安装并且能够正常启动。 --- ##### 方法四:检查 ENTRYPOINT 和 CMD 使用方式 根据描述中的引用内容提到如何正确处理 ENTRYPOINT 和 CMD 参数组合[^2]。对于长时间运行的服务程序来说,建议采用如下形式来避免信号传递失败等问题: ```dockerfile ENTRYPOINT ["nginx", "-g", "daemon off;"] ``` 这样可以直接调用 Nginx 主进程而无需经过 Shell 层级解析。 --- ### 总结 综上所述,要彻底解决 `nginx: executable file not found in $PATH` 错误可以从以下几个方面入手:选用合适的基底镜像;校验目标机器内的实际部署状况;合理设计自动化脚本流程以减少人为失误概率。最终目的是让整个应用程序链路更加稳健可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值