这里我不是询问如何将目录从主机安装到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 中描述,所以一切都在容器内运行!
那么有解决方法或其他方法吗?
答案 0 :(得分:1)
当主机上的文件(通常是UID)的权限和所有权与容器本身内部使用的权限和所有权不匹配时,会发生主机卷(将装入的目录绑定到容器中)的权限问题。您需要调整容器内使用的用户,更改主机上文件的权限,或两者兼而有。
另一个可能的问题是使用Docker for Windows或Docker for Mac并使用不与嵌入式VM共享的目录。在这些情况下,卷装入将导致空文件夹。默认情况下,/ Users与这两种产品中的VM共享。
请注意,这个问题非常典型,也是我尝试使用docker"本地"司机尽可能。命名卷初始化为映像的内容,包括文件权限,您可以使用单独的管理容器来管理它们,该容器为您需要进行的任何更改安装相同的卷(例如,运行{{1}的简单busybox容器更新内容)。
编辑:这是从容器内部编辑文件的示例
tar -xzf