共享卷/文件权限/所有权(Docker)

9 linux docker

我在使用Docker容器时遇到了一个有点恼人的问题(我在Ubuntu上,因此没有像VMWare或b2d那样的虚拟化).我已经构建了我的映像,并且有一个正在运行的容器,它有一个来自我的主机的共享(挂载)目录,以及一个来自我的主机的共享(挂载)文件.这是docker run完整的命令:

docker run -dit \
-p 80:80 \
--name my-container \
-v $(pwd)/components:/var/www/components \
-v $(pwd)/index.php:/var/www/index.php \
my-image
Run Code Online (Sandbox Code Playgroud)

这很好用,并且/components(和它的内容)和文件都被适当地共享.但是,当我想要更改目录(例如添加新文件或文件夹),或编辑已安装的文件(或目录中的任何文件)时,由于权限不正确,我无法这样做.运行ls- lFh的表演ownergroup所安装的项目已更改为libuuid:libuuid.修改文件或父目录需要root权限,这会阻碍我的工作流程(因为我使用的是Sublime Text,而不是Terminal,我会看到管理员权限的弹出窗口).

为什么会这样?我该如何解决这个/正确处理?从管理数据卷:将主机文件作为数据卷安装:

注意:许多用于编辑文件的工具(包括vi和sed --in-place)可能会导致inode更改.从Docker v1.1.0开始,这将产生一个错误,例如"sed:无法重命名./sedKdJ9Dy:设备或资源忙".在您要编辑已安装文件的情况下,通常最容易安装父目录.

这似乎表明,与其安装/components/index.php,我应该不是安装两者的父目录.理论上听起来很棒,但根据-v选项的行为以及它与之交互的方式/directory,我的父目录中的每个文件都会被更改为拥有libuuid:libuuid.另外,我在容器中有很多东西在容器中不需要 - 比如构建工具,各种文件,一些压缩文件夹等.挂载整个父目录似乎是浪费.

运行chown user:group/components/index.php 我的主机上让我来解决这一点,似乎继续与容器同步.这是我每次运行装有主机卷的容器时都需要做的事吗?我猜测有一种更有效的方法可以做到这一点,我只是在任何地方找不到我的特定用例的解释.

我正在使用这个容器来开发另一个程序的模块,并且不想管理一个只有数据的容器 - 唯一重要的文件来自我的主机; 其他地方不需要持久性(如数据库等).

创建映像后,这是我正在使用的运行命令:

docker run -dit \
    -p 80:80 \
    --name my-container \
    -v $(pwd)/components:/var/www/wp-content/plugins/my-plugin-directory/components \
    -v $(pwd)/index.php:/var/www/wp-content/plugins/my-plugin-directory/index.php \
    my-image
Run Code Online (Sandbox Code Playgroud)

Chr*_*nel 4

看起来容器内的命令正在将文件上的所有权位更改为主机上chown -R nginx:nginx ...拥有的。libuuid

有关文件所有权位如何在主机和 Docker 容器之间工作的基本说明,请参阅了解 docker 中的用户文件所有权:如何避免更改链接卷的权限。