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

时间:2017-01-22 20:50:40

标签: docker dockerfile docker-container

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

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

现在我正在使用Gitlab fork,并使用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 中描述,所以一切都在容器内运行!

那么有解决方法或其他方法吗?

1 个答案:

答案 0 :(得分:1)

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

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

请注意,这个问题非常典型,也是我尝试使用docker"本地"司机尽可能。命名卷初始化为映像的内容,包括文件权限,您可以使用单独的管理容器来管理它们,该容器为您需要进行的任何更改安装相同的卷(例如,运行{{1}的简单busybox容器更新内容)。

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

tar -xzf