繁体   English   中英

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

[英]In Docker for Windows, permissions denied for mkdir/chown

我正在开发一个幽灵博客并将其部署为 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\\ 中创建 Project\\site 目录
  2. 将 docker-compose.yml 文件放在目录下:
  3. 运行docker-compose up

docker-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.ymldocker-compose.yml出现此错误:

博客_1 | chown:更改“/var/lib/ghost”的所有权:权限被拒绝

site_blog_1 退出,代码为 1

挂载目录绝对有效,我已经运行了 Docker for Windows 中共享驱动器设置中显示的 alpine ls /data 示例。

我已经比较了 docker、虚拟网络、家庭和工作之间的目录中的设置——我能找到的唯一区别是因为工作在一个域上,并且具有不同的用户名,而我的 Windows 版本是1607.

我不知道这是一个错误,是当前 windows && docker 之间的不良交互,还是我在本地做错了什么。 我承认我倾向于后者,因为我在任何地方都找不到关于此的文档。

这个问题(我不知何故错过了) 将配置文件挂载到容器时出错

回答这个问题。

我取消共享C,转发它并仍然有问题。 我点击“重置凭据”,然后转发它(输入我的密码),它工作。

我在Windows 10上遇到这个问题已经有一段时间了。 解决方案是我在互联网上找到的一系列建议 - 假设您要共享的目录位于您的用户目录之下:

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

在Win 10的情况下,我不得不将整个驱动器的所有者更改为我自己的用户,而不是使用重置凭据 重新共享 docker中的驱动器 见下图:

更改驱动器所有者 在docker中重新共享驱动器

如果您在 docker 中收到错误消息:

mkdir: can't create directory 'l': Permission denied

尝试在 Windows 上的共享文件夹中创建文件夹或文件时,这是给您的。

确保您拥有共享文件夹的完全控制权限,以实现此目的:

要检查您是否具有完全控制权限,请从 Windows 文件管理器转到网络,选择驱动器并尝试从所选文件夹中创建文件。

从网络路径中选择驱动器

如果您收到错误消息,说您没有权限,则表示您有读取权限但没有写入权限。

在这种情况下,从网络路径中的文件夹中,右键单击并选择属性-> 选择“共享”选项卡-> 单击“高级共享”。

选择高级共享

在“高级共享”窗口中,单击“权限”。

权限窗口

在权限窗口中,选择“完全控制”。

在此处输入图片说明

完成后,您可以返回 Docker 并尝试创建一个文件。

docker run -it -v "$(pwd):/myapp" node:16 sh
cd myapp
touch b.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM