Ubuntu 18.04下如何将内部HDD挂载至Docker容器以训练AI模型
当然可以挂载你的内部HDD到Docker容器里,这正是Docker绑定挂载的典型使用场景——完全不用复制那堆超大的数据集,直接让容器访问硬盘上的文件就行。下面是针对Ubuntu 18.04的一步步解决方案:
第一步:先把HDD挂载到Ubuntu主机上
首先得确保你的HDD在主机上能正常访问,如果还没挂载,按下面步骤来:
- 打开终端,输入
lsblk命令,找到你的内部HDD设备(通常系统盘是/dev/sda,新增的HDD可能是/dev/sdb1这类) - 创建一个主机上的挂载目录,比如:
sudo mkdir /mnt/ai-dataset - 把HDD挂载到这个目录:
sudo mount /dev/sdb1 /mnt/ai-dataset(把/dev/sdb1换成你实际的设备名) - 验证一下:输入
ls /mnt/ai-dataset,能看到你的数据集文件就说明挂载成功了
为了避免重启主机后挂载失效,需要把配置写到/etc/fstab里:
- 先获取HDD的UUID:
blkid /dev/sdb1,复制输出里的UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx部分 - 编辑fstab文件:
sudo nano /etc/fstab - 在文件末尾加一行:
UUID=你的UUID值 /mnt/ai-dataset ext4 defaults 0 2(如果你的HDD用的是xfs等其他文件系统,把ext4改成对应的类型) - 保存退出后,执行
sudo mount -a验证配置,没报错就搞定了
第二步:把HDD挂载到Docker容器
Docker提供两种简单的方式来映射主机目录到容器,选哪种都可以:
方式1:用-v参数(简单直接)
启动容器时加上-v参数,把主机的HDD挂载目录映射到容器内的指定路径,比如:
docker run -it --rm -v /mnt/ai-dataset:/app/dataset 你的训练镜像名 python train.py --input /app/dataset
解释下:
-v /mnt/ai-dataset:/app/dataset:把主机的/mnt/ai-dataset目录挂载到容器内的/app/dataset路径- 后面的
python train.py --input /app/dataset就是你的训练命令,直接用容器内的这个路径作为数据集输入就行
方式2:用--mount参数(更清晰,适合复杂场景)
如果需要更明确的配置,推荐用--mount:
docker run -it --rm --mount type=bind,source=/mnt/ai-dataset,target=/app/dataset 你的训练镜像名 python train.py --input /app/dataset
第三步:解决常见的权限问题
如果容器内运行训练代码时提示「Permission denied」,大概率是主机目录的权限和容器内用户不匹配,这里有两种解决方法:
- 临时快速解决:启动容器时加上
--user root,让容器以root用户运行,这样就能访问主机目录了:docker run -it --rm --user root -v /mnt/ai-dataset:/app/dataset 你的训练镜像名 python train.py --input /app/dataset - 更安全的长期方案:调整主机挂载目录的权限,让容器内的用户(比如普通用户UID=1000)有读取权限:
sudo chmod -R 755 /mnt/ai-dataset # 如果你知道容器内用户的UID,也可以直接修改目录所属: sudo chown -R 1000:1000 /mnt/ai-dataset
额外小提示
- 如果你的训练镜像是自己用Dockerfile构建的,可以在Dockerfile里提前创建好容器内的目标目录(比如
RUN mkdir /app/dataset),这样挂载的时候更顺畅 - 除非绝对必要,别用
--privileged参数,它会给容器太多系统权限,不安全
内容的提问来源于stack exchange,提问作者MesTor
相关产品推荐
相关产品推荐

