zoukankan      html  css  js  c++  java
  • 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挂载点丢失,具体原因目前还未知晓,若有知晓者欢迎告知!

  • 相关阅读:
    [node.js学习]为node.js写的一个操作mysql的类
    极光IM简单接入步骤
    windows自带的netsh 端口转发
    nodejs 做的带管理后台的东东,主要学习到 ....我忘了学到什么了
    利用来JS控制页面控件显示和隐藏有两种方法
    phpstudy 出现You don't have permission to access / on this server.
    禁用input自动填充
    一般充值的流程
    jq传输json字符串
    ECSHOP更改后台顶部图片
  • 原文地址:https://www.cnblogs.com/wanghongli/p/11200624.html
Copyright © 2011-2022 走看看