docker-compose exec时出现"fork/exec /proc/self/exe: no such file or directory" 报错

问题:跟往常一样执行docker-compos exec redis sh时出现如下错误,而容器是运行状态中。

# docker-compose exec redis sh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "process_linux.go:75: starting setns process caused \"fork/exec /proc/self/exe: no such file or directory\""

解决办法:

1、获取容器ID

# docker ps | grep arcs_redis_1
ac248a3c5c0e        redis:alpine                 "docker-entrypoint..."   2 years ago         Up 16 minutes                   6379/tcp                                                                                                                                          arcs_redis_1

2、通过容器ID获取容器的PID

# ps -ef|grep libcontainerd | grep ac248a3c5c0e
root      6650  9053  0 11:14 ?        00:00:00 docker-containerd-shim ac248a3c5c0e3f6405c35e186b5d095aeb7af72b0f52bb08303baded251cdb61 /var/run/docker/libcontainerd/ac248a3c5c0e3f6405c35e186b5d095aeb7af72b0f52bb08303baded251cdb61 docker-runc

注:第二个字段为容器的PID

3、获取容器的mount位置

# grep "path" /var/run/docker/libcontainerd/ac248a3c5c0e3f6405c35e186b5d095aeb7af72b0f52bb08303baded251cdb61/config.json

注:mount的路径:{"path":"/var/lib/docker/devicemapper/mnt/cc2ff9576cdf7736acca50ffdaadef471e01a8ffe9acb039c1d423edd941bd38/rootfs"},此路径用于第6步挂载时使用。

4、用nsenter进入容器的namespace

# nsenter -m -t 6650 bash
注: 6650是容器的PID

5、查看容器的DeviceName

# docker inspect --format='{{.GraphDriver.Data.DeviceName}}' ac248a3c5c0e       ####ac248a3c5c0e是容器ID
docker-252:0-9700888-cc2ff9576cdf7736acca50ffdaadef471e01a8ffe9acb039c1d423edd941bd38

6、手动挂载

# mount /dev/mapper/docker-252\:0-9700888-cc2ff9576cdf7736acca50ffdaadef471e01a8ffe9acb039c1d423edd941bd38 -o rw,relatime,nouuid,attr2,inode64,sunit=512,swidth=1024,noquota -t xfs /var/lib/docker/devicemapper/mnt/cc2ff9576cdf7736acca50ffdaadef471e01a8ffe9acb039c1d423edd941bd38

7、退出

#exit

 8、再次执行docker-compose exec redis sh 无报错。

 

 说明:此报错是由于mount挂载点丢失,具体原因目前还未知晓,若有知晓者欢迎告知!

 

转载于:https://www.cnblogs.com/wanghongli/p/11200624.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在 Linux/MacOS 系统中运行 `docker-compose` 命令出现 `/usr/local/bin/docker-compose: No such file or directory` 的错误,可能是因为 Docker Compose 没有被正确安装或者安装路径不在 `/usr/local/bin` 目录下。你可以按照以下步骤来解决这个问题: 1. 确认你已经安装了 Docker Compose。可以在命令行中输入以下命令:`docker-compose version`,如果输出了 Docker Compose 的版本信息,则说明已经安装成功; 2. 如果你没有安装 Docker Compose,可以参考 Docker 官方文档安装:https://docs.docker.com/compose/install/; 3. 如果已经安装了 Docker Compose,但是仍然出现了这个问题,可能是因为 Docker Compose 安装路径不在 `/usr/local/bin` 目录下。你可以按照以下步骤来查找 Docker Compose 的安装路径: - 在命令行中输入以下命令,查找 Docker Compose 的安装路径: ``` which docker-compose ``` - 如果输出了 Docker Compose 的安装路径,例如 `/usr/bin/docker-compose`,则说明 Docker Compose 安装路径不在 `/usr/local/bin` 目录下; - 如果没有输出 Docker Compose 的安装路径,则说明 Docker Compose 没有被正确安装,你需要重新安装 Docker Compose。 4. 将 Docker Compose 的安装路径添加到系统环境变量中。具体步骤如下: - 打开系统环境变量设置:在命令行中输入以下命令: ``` export PATH=$PATH:/path/to/docker-compose ``` 其中,`/path/to/docker-compose` 是 Docker Compose 的安装路径。 - 保存设置并关闭窗口,重新打开命令行窗口,再次输入命令:`docker-compose version`,如果输出了 Docker Compose 的版本信息,则说明已经解决了这个问题。 如果以上操作无法解决问题,你可以尝试重新安装 Docker Compose。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值