【问题标题】:Docker (NGINX, PHP, mySQL) and Windows - File PermissionsDocker(NGINX、PHP、mySQL)和 Windows - 文件权限
【发布时间】:2016-05-04 21:22:33
【问题描述】:

我已经研究 docker 几个小时了;我正在运行 Windows 8.1 作为主机,VirtualBox 与 boot2docker。

这是我的 docker-compose.yml:

mysql:
    image: mysql
    ports: 
        - "6603:3306"    
    environment:
        MYSQL_ROOT_PASSWORD: mysql
        MYSQL_USER: mysql
fpm:
    image: php:7.0.2-fpm
    volumes:
        - /c/Users/Administrator/www:/var/www/html
    ports:
        - "9000:9000"
    links:
        - mysql
nginx:
    image: nginx 
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - /c/Users/Administrator/www:/var/www/html
    links:
        - fpm

这很好用(我可以去我的 docker ip 地址并查看 nginx 欢迎页面);尽管例如当我运行 mkdir(通过 php)时,它会给出有关 Windows 权限的错误。

【问题讨论】:

    标签: php mysql nginx docker docker-compose


    【解决方案1】:

    你应该使用volumes标签而不是volumes_from

    • volumes 可以从宿主机挂载目录到容器 和
    • volumes_from 从其他服务或容器挂载目录

    请看docker-compose file documentation

    你的 docker-compose 文件应该是这样的:

    fpm:
        image: php:7.0.2-fpm
        volumes:
            - /c/Users/Administrator/www:/var/www/html
        ports:
            - "9000:9000"
        links:
            - mysql
    nginx:
        image: nginx 
        ports:
            - "80:80"
            - "443:443"
        volumes_from:
            - fpm
        links:
            - fpm
    

    【讨论】:

    • 拼写错误;它实际上是现实中的体积。 - 仍然没有解决权限问题。
    • 没有创建目录的权限
    • 我的意思是 docker 运行良好,但是如果你用 php 尝试 mkdir 它将无法工作。
    • 如果有人发现如何解决这个问题,请告诉我:)
    【解决方案2】:

    这是 Windows 文件系统与 VirtualBox 虚拟机共享方式的限制,使用 VirtualBox 来宾添加。

    与 VirtualBox VM 共享的文件归 VM 内的用户“docker”和组“staff”所有。 VM(和容器)内的进程无法更改这些文件的所有权。

    作为一种解决方法,您可以尝试以相同的uid/gid 这些文件 (--user 1000:50) 运行您的容器;

    -u, --user=""                 Username or UID (format: <name|uid>[:<group|gid>])
    

    --ulimit=[] 限制选项

    GitHub 问题跟踪器上还有一个未解决的问题,其中提到了一些解决方法; #581 Only root can write to OSX volumes / Can't change permissions within

    【讨论】:

    • 我们可以参考--user 参数用法吗?就我现在而言,docker 将拥有来自 v1.10 的用户映射
    • 这是一个不同的功能;用户命名空间将允许您重新映射根用户守护程序范围(不是每个容器)。 --user 功能在 Docker 中已经存在了很长一段时间。我将添加指向文档的链接
    • 我无法运行 docker-compose up --user;我应该试试别的吗?
    • 似乎没有任何适当的解释来说明如何解决这个问题:s
    • 您可以将user:添加到docker-compose.yml
    猜你喜欢
    • 2018-09-21
    • 2021-04-22
    • 2016-03-26
    • 2018-07-17
    • 2020-06-26
    • 2017-01-19
    • 2020-06-21
    • 2020-05-02
    • 2015-10-19
    相关资源
    最近更新 更多