00000524
安装好SDK,导入base镜像后,使用docker命令启动容器,命令如下:
docker run -it -v /usr/src:/usr/src -v /lib/modules:/lib/modules -v /dev:/dev
--net=host --privileged --cap-add=ALL --pid=host
--name=dev1 vllm:1.0 /bin/bash
报错:
docker : Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed : runc create failed: unable to start container process: error during container init: open /dev/pts/ptmx: no such file or diretory: unknown
原因分析:
这个错误的根本原因是把/dev 整个挂载进容器,但宿主机的/dev/pts 是一个独立的 devpts 文件系统,bind mount /dev 不会自动带上它的子挂载点,导致容器内 /dev/pts/ptmx 不存在,而 -it 需要 PTY 就报错了。
注意:
有的环境执行不会报错,原因是那个宿主机的 /dev 下本身就有完整的 devpts 挂载,bind mount /dev 时 /dev/pts 也被一起带进去了。
是否报错取决于宿主机内核和 systemd 的配置:
/dev/pts 作为独立 devpts 挂载,bind mount /dev 不会递归带上子挂载 /dev 的挂载结构不同,/dev/pts 可能是以 bind 方式存在的,就能被一起带进去
去掉 -it 改用 -id(后台运行),就绕开了 PTY 的问题。
docker run -id -v /usr/src:/usr/src -v /lib/modules:/lib/modules -v /dev:/dev
--net=host --privileged --cap-add=ALL --pid=host
--name=dev1 vllm:1.0 /bin/bash