在Docker for Windows中,mkdir / chown的权限被拒绝

时间:2017-05-09 22:21:48

标签: windows docker permissions

我正在开发一个ghost博客并将其部署为docker容器。由于我的项目的目标之一是使用实时数据开发主题和其他东西,我已经根据ghost docker图像的建议为/ var / lib / ghost目录创建了卷装入。

ghost docker镜像安装驱动器正常,但当它尝试chown文件时,它会收到权限被拒绝错误。我正在运行Windows 10的Creator更新,以及最新的Windows版Docker(即Windows 10 Pro versin 1703和Docker版本17.03.1-ce-win5)

作为测试,我在家和工作中都遵循了这个程序(我在以前版本的Windows 10上):

  1. 在C:\ users \ joe \
  2. 中创建Project \ site目录
  3. 将docker-compose.yml文件放在目录下面:
  4. 运行docker-compose up
  5. 搬运工-compose.yml

    version: '3'
    services:
      blog:
        image: ghost
        volumes:
          - ./blog:/var/lib/ghost
        ports:
          - "2368:2368"
    

    在我的工作机器上,它创建了博客目录,并使用鬼博客所期望的主题和内容填充它。

    在我的家用机器上,我收到此错误:

      

    错误:对于博客无法启动服务博客:创建安装源路径时出错'/ C / Users / joe / Projects / site / blog':mkdir / C / Users / joe / Projects / site / blog:权限被拒绝   错误:在启动项目时遇到错误。

    如果我自己创建目录,然后再次运行docker-compose.yml,我会收到此错误:

      

    blog_1 | chown:更改'/ var / lib / ghost'的所有权:权限被拒绝

         

    site_blog_1退出,代码为1

    安装目录肯定有效,我运行了Docker for Windows中共享驱动器设置上显示的alpine ls / data示例。

    我将docker中的设置,虚拟网络上的设置与家庭和工作之间的目录进行了比较 - 我能找到的唯一区别是因为工作在域上,并且具有不同的用户名,而且我的版本窗户是1607。

    我不知道这是不是一个错误,当前窗口和&&码头工,或者我在当地做错了什么。我承认我倾向于后者,因为我可以在任何地方找到关于此的 no 文档。

3 个答案:

答案 0 :(得分:4)

这个问题(我不知何故错过了)Error mounting a config file into the container

回答了这个问题。

我取消共享C,转发它并仍然遇到问题。 我点击了#34;重置凭据"然后转发它(输入我的密码)然后就可以了。

答案 1 :(得分:0)

我在Windows 10上为这个问题苦苦挣扎了一段时间。解决方案是我在互联网上找到的建议的组合-鉴于您要共享的目录位于您的用户目录下:

  1. 在Windows中创建新用户-例如DockerHost(无需电子邮件地址,只需用户名和密码)
  2. 授予用户目录下第一个文件夹的读取权限,例如C:\ Users \ YourName \ Development(右键单击文件管理器中的目录,选择“安全性”选项卡,确保已在其中添加DockerHost用户并至少授予读取权限。
  3. 对所有文件夹(直到要共享的文件夹)执行相同操作
  4. 在Docker桌面设置中,转到“共享驱动器”,选择(可能是)C驱动器,重置凭据,然后再次共享(选中复选框并单击“应用”),并在提示输入用户名和密码时,输入您创建的用户名,例如DockerHost以及密码。
  5. 现在,当运行类似docker container run -p 80:80 -v C:\Users\YourName\Development\docker_examples:/usr/share/nginx/html --rm nginx之类的东西时,它应该可以工作

答案 2 :(得分:-1)

就Win 10而言,我必须将整个驱动器上的所有者更改为我自己的用户,而不是在Docker 重新共享驱动器重置凭据。请参见以下图片:

change the drive owner re-share the drive in docker