如何在 Linux 主机上的 docker 容器内挂载目录
How to mount a directory inside a docker container on Linux host
我想将目录从 docker 容器挂载到本地文件系统。该目录是网站根目录,我需要能够使用任何编辑器在本地计算机上对其进行编辑。
我知道我可以 运行 docker run -v local_path:container_path
但这样做只是在容器内创建一个空目录。
如何在 linux 主机上的 docker 容器内挂载目录?
如果您的目标是准备就绪 LAMP,您应该在 Dockerfile 中使用 VOLUMES 声明。
VOLUME volume_path_in_container
问题是 docker 不会挂载文件,因为它们已经存在于您创建卷的路径中。您可以按照@Grif-fin 在他的评论中所说的那样进行,或者修改容器的入口点,以便他在 运行 时间将您想要公开的文件复制到卷中。
您必须使用 build COPY
或 ADD
命令在 Dockerfile 中插入数据,这样基础文件才会出现在容器中。
然后创建一个入口点,它将文件从 COPY
路径复制到卷路径。
然后 运行 容器使用 -v 标签并喜欢 -v local_path:volume_path_in_container
。像这样,您应该将容器内的文件安装在本地。 (至少,这是我添加的)。
在这里找一个例子:https://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp.
它将避免每次都必须构建,并且您可以从确定的图像中提供它。
更好的是,最好添加一个用户支持,这样您就可以成为已安装文件的所有者(如果您不是 root)。
希望对你有用。
这有点奇怪,但您可以为此使用命名卷。尽管主机安装了卷,但命名的卷不会被清空。你可以访问目录。看例子:
docker volume create --name data
docker run -rm=true -v data:/etc ubuntu:trusty
docker volume inspect data
[
{
"Name": "data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/data/_data",
"Labels": {},
"Scope": "local"
}
]
看到挂载点了吗?
mkdir ~/data
sudo -s
cp -r /var/lib/docker/volumes/data/_data/* ~/data
echo "Hello World">~/data/hello.txt
docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/fstab #The content is preserved
docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/hello.txt #And your changes too
这不完全是您所要求的,但取决于您的需要
此致
我想将目录从 docker 容器挂载到本地文件系统。该目录是网站根目录,我需要能够使用任何编辑器在本地计算机上对其进行编辑。
我知道我可以 运行 docker run -v local_path:container_path
但这样做只是在容器内创建一个空目录。
如何在 linux 主机上的 docker 容器内挂载目录?
如果您的目标是准备就绪 LAMP,您应该在 Dockerfile 中使用 VOLUMES 声明。
VOLUME volume_path_in_container
问题是 docker 不会挂载文件,因为它们已经存在于您创建卷的路径中。您可以按照@Grif-fin 在他的评论中所说的那样进行,或者修改容器的入口点,以便他在 运行 时间将您想要公开的文件复制到卷中。
您必须使用 build COPY
或 ADD
命令在 Dockerfile 中插入数据,这样基础文件才会出现在容器中。
然后创建一个入口点,它将文件从 COPY
路径复制到卷路径。
然后 运行 容器使用 -v 标签并喜欢 -v local_path:volume_path_in_container
。像这样,您应该将容器内的文件安装在本地。 (至少,这是我添加的)。
在这里找一个例子:https://github.com/titouanfreville/Docker/tree/master/ready_to_go_lamp.
它将避免每次都必须构建,并且您可以从确定的图像中提供它。
更好的是,最好添加一个用户支持,这样您就可以成为已安装文件的所有者(如果您不是 root)。
希望对你有用。
这有点奇怪,但您可以为此使用命名卷。尽管主机安装了卷,但命名的卷不会被清空。你可以访问目录。看例子:
docker volume create --name data
docker run -rm=true -v data:/etc ubuntu:trusty
docker volume inspect data
[
{
"Name": "data",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/data/_data",
"Labels": {},
"Scope": "local"
}
]
看到挂载点了吗?
mkdir ~/data
sudo -s
cp -r /var/lib/docker/volumes/data/_data/* ~/data
echo "Hello World">~/data/hello.txt
docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/fstab #The content is preserved
docker run --rm=true -v ~/data:/etc ubuntu:trusty cat /etc/hello.txt #And your changes too
这不完全是您所要求的,但取决于您的需要
此致