繁体   English   中英

如何从Docker容器正确编辑主机目录

[英]How to properly edit host directory from a docker container

在这里,我不是在问如何将目录从主机安装到Docker容器,而是要如何编辑从容器安装的目录。

我将提供有关用例的更多详细信息

现在,我正在使用Gitlab分支,并使用GDK (Gitlab开发套件),并在安装过程中运行以下命令:

gdk install gitlab_repo=https://gitlab.com/MY-FORK/gitlab.git

该命令将在项目内部创建一个名为gitlab的目录

为了进行该项目,我将使用主机上的文本编辑器,因此我需要同步两个目录

这是我的尝试:

docker run -it -p 3000:3000 -v /gitlab:${project-location}/gitlab ${image-name}

这种方法的问题是当我运行安装命令时:

gdk install gitlab_repo=https://gitlab.com/MY-FORK/gitlab.git 

它失败,因为它试图更改已装入目录中的文件,并且不允许这样做(拒绝权限)

提示:所有安装步骤均在Dockerfile中进行了描述,因此一切都在容器内运行!

那么,有没有解决方法或另一种方法?

当主机上文件的权限和所有权(通常为UID)与容器本身内部使用的权限和所有权不匹配时,就会发生主机卷的权限问题(将装入的目录绑定到容器中)。 您需要调整容器内使用的用户,更改主机上文件的权限,或者同时调整两者。

另一个可能的问题是使用适用于Windows的Docker或适用于Mac的Docker,以及使用未与嵌入式VM共享的目录。 在这些情况下,卷装入将导致一个空文件夹。 默认情况下,这两个产品中的/ Users与VM共享。

请注意,此问题相当典型,也是我尝试尽可能使用docker的“本地”驱动程序使用命名卷的原因。 命名卷将初始化为映像的内容,包括文件权限,并且您可以通过使用单独的管理容器来管理它们,该管理容器会为需要进行的任何更改安装相同的卷(例如,运行tar -xzf的简单busybox容器更新内容)。


编辑:这是从容器内部编辑文件的示例

$ ls -al data
total 16
drwxr-xr-x  4 bmitch bmitch 4096 Jun  8  2016 .
drwxr-xr-x 12 bmitch bmitch 4096 Jan 22 20:13 ..
-rw-r--r--  1 bmitch bmitch    0 Jun  8  2016 1
-rw-r--r--  1 bmitch bmitch    0 Jun  8  2016 2
drwxr-xr-x  2 bmitch bmitch 4096 Jun  8  2016 a
drwxr-xr-x  2 bmitch bmitch 4096 Jun  8  2016 b

$ id
uid=1000(bmitch) gid=1000(bmitch) groups=1000(bmitch),24(cdrom),27(sudo),120(bluetooth),127(vboxusers),999(docker)

$ docker run -v `pwd`/data:/data -u 1000 -it --rm busybox

/ $ ls -al /data
total 16
drwxr-xr-x    4 1000     1000          4096 Jun  8  2016 .
drwxr-xr-x   19 root     root          4096 Jan 23 10:24 ..
-rw-r--r--    1 1000     1000             0 Jun  8  2016 1
-rw-r--r--    1 1000     1000             0 Jun  8  2016 2
drwxr-xr-x    2 1000     1000          4096 Jun  8  2016 a
drwxr-xr-x    2 1000     1000          4096 Jun  8  2016 b

/ $ echo 'hello from inside the container' >/data/inside-container.txt

/ $ ls -al /data
total 20
drwxr-xr-x    4 1000     1000          4096 Jan 23 10:25 .
drwxr-xr-x   19 root     root          4096 Jan 23 10:24 ..
-rw-r--r--    1 1000     1000             0 Jun  8  2016 1
-rw-r--r--    1 1000     1000             0 Jun  8  2016 2
drwxr-xr-x    2 1000     1000          4096 Jun  8  2016 a
drwxr-xr-x    2 1000     1000          4096 Jun  8  2016 b
-rw-r--r--    1 1000     root            32 Jan 23 10:25 inside-container.txt

/ $ cat /data/inside-container.txt
hello from inside the container

/ $ exit

$ ls -al data
total 20
drwxr-xr-x  4 bmitch bmitch 4096 Jan 23 05:25 .
drwxr-xr-x 12 bmitch bmitch 4096 Jan 22 20:13 ..
-rw-r--r--  1 bmitch bmitch    0 Jun  8  2016 1
-rw-r--r--  1 bmitch bmitch    0 Jun  8  2016 2
drwxr-xr-x  2 bmitch bmitch 4096 Jun  8  2016 a
drwxr-xr-x  2 bmitch bmitch 4096 Jun  8  2016 b
-rw-r--r--  1 bmitch root     32 Jan 23 05:25 inside-container.txt

暂无
暂无

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

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