想象一下,我有一个包含一些静态数据的Docker容器。
现在出于开发目的,我希望将容器目录/resources
的内容装入我的本地工作目录.
。
docker-compose.yml:
version: '3.2'
services:
resources:
image: <private_registry>/resources:latest
volumes:
- ./resources:/resources
运行docker-compose up
时,在我的工作目录中创建了文件夹resources
,但文件夹中没有内容,而容器中的内容在/resources/
中
使用命名卷并对其进行检查时,它的工作与预期的一样。
答案 0 :(得分:1)
在特定情况下,Docker为图像的内容提供了卷源的初始化:
您当前处于第一个要求的困境,但是可以使用执行绑定安装的命名卷将主机上的任何文件夹映射到容器。以下是三种不同方法的示例:
# create the volume in advance
$ docker volume create --driver local \
--opt type=none \
--opt device=/home/user/test \
--opt o=bind \
test_vol
# create on the fly with --mount
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
foo
# inside a docker-compose file
...
volumes:
bind-test:
driver: local
driver_opts:
type: none
o: bind
device: /home/user/test
...
您的示例看起来更像:
version: '3.2'
services:
resources:
image: <private_registry>/resources:latest
volumes:
- resources:/resources
volumes:
resources:
driver: local
driver_opts:
type: none
o: bind
device: /full/path/to/resources
请注意,该目录必须预先存在于主机上。没有主机绑定绑定安装将失败,并且与主机主机不同,docker不会为您创建它。
答案 1 :(得分:0)
这里有几件事。首先,在装载主机目录时,它会将给定路径上的所有现有内容“阴影化”,从而有效地将其替换为装载内容。因此,主机上的资源目录正在隐藏容器中的所有内容。
没有简单的方法可以解决您的问题。当我要在容器中和主机上编辑文件时,我将文件保留在主机上并将它们装入容器中。如果要复制容器,可以将主机目录挂载到容器中的其他目录,并安排要复制的文件。