如何将/dev/sdb9磁盘分区挂载到Docker容器中?
将SD卡分区/dev/sdb9挂载到Docker容器的解决方案
问题背景
通过sudo blkid获取到SD卡分区信息,其中目标分区为:
/dev/sdb9: UUID="51e83a43-830f-48de-bcea-309a784ea35c" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="rootfs" PARTUUID="c58164a5-704a-4017-aeea-739a0941472f"
尝试将其挂载到Docker容器时执行了以下命令:
docker volume create --driver=local --opt type=ext4 --opt device=/dev/disk/by-uuid/51e83a43-830f-48de-bcea-309a784ea35c my-vol docker run <image id> -v my-vol:/my-vol -it bash
出现错误:
failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-v": executable file not found in $PATH: unknown.
错误原因
docker run命令的参数顺序错误:所有选项(如-v、-it)必须放在镜像ID/名称之前,否则Docker会将-v识别为容器内要执行的命令,导致找不到可执行文件的错误。
正确操作方法
方法一:使用预先创建的Volume
- 确认Volume已创建(你之前的创建命令是正确的,无需修改):
docker volume create --driver=local --opt type=ext4 --opt device=/dev/disk/by-uuid/51e83a43-830f-48de-bcea-309a784ea35c my-vol
- 修正
docker run的参数顺序,将-v选项移到镜像ID前面:
docker run -v my-vol:/my-vol -it <image id> bash
方法二:直接绑定挂载设备(无需提前创建Volume)
如果只是临时操作,可直接将分区设备路径挂载到容器内,省略Volume创建步骤:
# 使用设备路径 docker run -v /dev/sdb9:/my-vol -it <image id> bash # 或使用UUID路径(更稳定) docker run -v /dev/disk/by-uuid/51e83a43-830f-48de-bcea-309a784ea35c:/my-vol -it <image id> bash
注意事项
- 若要在容器内执行格式化、分区修改等操作,需要赋予容器足够的权限,建议添加
--privileged参数(注意:该参数会赋予容器接近主机的权限,仅在必要时使用):
docker run --privileged -v my-vol:/my-vol -it <image id> bash
- 确保主机系统未挂载该分区,否则容器内无法对其进行格式化等写入操作。
内容的提问来源于stack exchange,提问作者jake wong
相关产品推荐
相关产品推荐

