Windows + VirtualBox + Ubuntu + Docker + Nginx permissions



Windows 主机和 Ubuntu 来宾之间的共享文件夹具有以下权限: 777 in Windows 770 in Ubuntu

所以......当我像这样运行一个 docker-compose 时:

version: '2'
services:
    web:
        image: nginx:latest
        ports:
            - "8080:80"
        volumes:
            - ./sf_compartida/codigo:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./sf_compartida/codigo:/code
        networks:
            - code-network
networks:
    code-network:
        driver: bridge

还有这个 Nginx 的 site.conf 文件:

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /code;
    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

容器中文件夹/code 中的权限有 770 个权限,它抛出 403 个禁止权限。以下权限位于 Ubuntu 中(在 VBox 中(,位于 Windows 和 Ubuntu 之间的共享文件夹中 (sf_compartida(:

/home/ubuntu/geek/dockerised-php/sf_compartida/codigo
drwxrwx--- 1 root vboxsf    0 abr 11 20:27 ./
drwxrwx--- 1 root vboxsf 4096 abr 11 20:24 ../
-rwxrwx--- 1 root vboxsf    2 mar 27 17:42 adios.php*
-rwxrwx--- 1 root vboxsf    0 abr 11 20:07 fichero1.php*
-rwxrwx--- 1 root vboxsf   24 mar 27 17:40 hola.php*
-rwxrwx--- 1 root vboxsf   29 mar 25 23:56 index.php*

以及 Web 容器内的权限:

drwxrwx--- 1 root  119    0 Apr 11 18:27 .
drwxr-xr-x 1 root root 4096 Apr 11 19:00 ..
-rwxrwx--- 1 root  119    2 Mar 27 15:42 adios.php
-rwxrwx--- 1 root  119    0 Apr 11 18:07 fichero1.php
-rwxrwx--- 1 root  119   24 Mar 27 15:40 hola.php
-rwxrwx--- 1 root  119   29 Mar 25 21:56 index.php

我尝试使用其他文件夹(不是通过 VBox 共享的文件夹(并且它可以工作,而且如果我将权限从 777 更改为 770,它就不再有效了,所以一切都告诉我权限导致了问题。

请帮忙...知道吗?

我有一些问题。我试图解决这个问题,但没有找到任何东西。

但我在小组中理解了这个问题:vboxsf

我找到了文档

并在主目录中为当前用户创建短脚本和mnt目录

sharename="Ubuntu1604Docker"
sudo mkdir /mnt/$sharename 
sudo chmod 777 /mnt/$sharename 
sudo mount -t vboxsf -o uid=1000,gid=1000 $sharename /mnt/$sharename 
ln -s /mnt/$sharename $HOME/mnt/$sharename

并运行此脚本:$ sudo ./mnt.sh

在我的共享目录 Ubuntu1604Docker 上创建了 mnt 目录符号链接,具有正确的权限 当前用户名:组名

script@ubuntu-16:~/mnt$ ll
total 8
drwxrwxr-x  2 script script 4096 Apr 29 19:45 ./
drwxr-xr-x 10 script script 4096 Apr 29 19:58 ../
lrwxrwxrwx  1 script script   21 Apr 29 19:45 Ubuntu1604Docker -> /mnt/Ubuntu1604Docker/

附言对不起我的英语

我在使用 apache 作为网络服务器时遇到了同样的问题,并解决了以下问题:

  • 首先,我将 vboxsf 组添加到我的容器中
   $ docker exec addgroup --gid id_of_vboxsf_group
  • 然后,我将 apache 用户(在我的例子中是 www-data(添加到组中
   $ docker exec usermod -aG vboxsf www-data #(你的用户可以不同(

我无法更改权限,因此我将相同的环境(用户和组(从主机映射到 docker 容器。

最新更新