案例是这样的:

  • 有一台 osx 系统
  • 安装了 virtualbox 虚拟机
  • 在虚拟机里面装 Linux
  • 在 Linux 里面装了 docker
  • 用 docker 装了 Ubuntu 的 image
  • 在 Ubuntu 的 container 中装了 nginx

现在把OSX 下的一个 web 开发文件夹共享给 virtualbox下的 Linux,然后在通过 docker 映射到 container 下,nginx 的 root 目录指向这个文件夹,提供 web 服务。

但是问题来了,nginx 会报错说“permission denied”。在 container 下可以很明显的看到,共享文件夹中的内容是存放在了999这个 group 中。

分析一下原因,根源在于 virtualbox 从某一个版本开始,无法修改 osx 共享目录的权限了。可以看到,在 virtualbox 下的 Linux 中,共享文件夹的权限在一个叫做vboxsf的 group 下面。

以下是解决方法:

  • 在 container 下创建一个叫做vboxsf的 group: groupadd vboxsf
  • 修改这个 group 的 id 为999:vim /etc/group
  • 把 www-data 这个用户加入到vboxsf中:usermod -a -G vboxsf www-data
  • 重启 nginx:service nginx restart

Comments