Ubuntu系统下Docker挂载目录被拒绝问题求助
各位前辈好,我最近在Ubuntu 20.04上折腾Django项目的Docker部署,用docker-compose up -d --build命令构建镜像的时候,突然碰到了挂载目录被拒绝的问题,卡在这里好久了,想请教下大家怎么解决。
先说说我的情况:已经写好了Dockerfile和docker-compose.yml,postgres容器能正常启动,但app容器启动时直接报错,错误信息如下:
✔ Container postgres Started
⠙ Container app Starting
Error response from daemon: Mounts denied:
The path /media/shokouh/51eb51ef-6583-499a-81b4-5f3f2e6acac2/codes/SmartFactorySystem is not shared from the host and is not known to Docker.
这个路径是我外接硬盘里的项目目录,我猜是不是Docker没有权限访问外部存储的目录?有没有大佬能指点下具体的解决步骤呀?
我自己试了一些方法但没成功,也列出来给大家参考:
- 检查了目录权限,给了755权限,但还是不行
- 重启过Docker服务,没效果
可能的解决方案(整理自社区经验):
配置Docker允许访问该目录:
编辑Docker的守护进程配置文件/etc/docker/daemon.json(如果文件不存在就新建一个),添加允许的路径:{ "allowed-rofs": ["/media/shokouh/51eb51ef-6583-499a-81b4-5f3f2e6acac2/codes/SmartFactorySystem"] }保存后重启Docker服务:
sudo systemctl restart docker,然后重新运行构建命令试试。修改外接存储的挂载权限:
如果你是通过fstab挂载的外接硬盘,可以在挂载参数里加上用户权限,比如:/dev/sdX1 /media/shokouh/51eb51ef-6583-499a-81b4-5f3f2e6acac2 ext4 defaults,uid=1000,gid=1000 0 2这里的
uid和gid可以用id命令查看你当前用户的ID,修改后重新挂载:sudo mount -a,再尝试构建。检查docker-compose的volumes配置:
确认你的docker-compose.yml里的volumes路径是正确的绝对路径,没有拼写错误,比如:services: app: build: . volumes: - /media/shokouh/51eb51ef-6583-499a-81b4-5f3f2e6acac2/codes/SmartFactorySystem:/app # 其他配置...临时用特权模式排查:
要是上面的方法都不行,可以先在docker-compose.yml的app服务里加上privileged: true,看看能不能启动,这能帮你判断是不是权限问题:services: app: privileged: true # 其他配置...不过这个方法不推荐长期使用,毕竟特权模式会给容器太高的权限,有安全风险。
希望这些方法能帮到我,也欢迎各位大佬补充其他解决方案!
备注:内容来源于stack exchange,提问作者Shokouh Dareshiri

