Pea*_*ger 9 docker docker-compose docker-stack
混合命名卷和绑定挂载如何工作?使用以下安装程序,绑定安装中的路径是否仍将存在于绑定安装中,就像绑定安装中存在的路径一样?
/var/www/html/wp-content/uploads
使用我附加到命名卷的单独容器,似乎表明情况并非如此,因为从单独容器的角度来看,这些路径是完全空的。有某种方法可以在某种意义上起作用吗?
volumes:
- "wordpress:/var/www/html"
- "./wordpress/uploads:/var/www/html/wp-content/uploads"
- "./wordpress/plugins:/var/www/html/wp-content/plugins"
- "./wordpress/themes:/var/www/html/wp-content/themes"
BMi*_*tch 10
主机卷:对于主机卷,在docker撰写文件中使用路径定义,例如:
volumes:
- "./wordpress/uploads:/var/www/html/wp-content/uploads"
Run Code Online (Sandbox Code Playgroud)
您将不会从映像内容中收到主机目录的任何初始化。这是设计使然。
命名卷:您可以定义一个映射回本地目录的命名卷:
version: "2"
services:
your-service:
volumes:
- uploads:/var/www/html/wp-content/uploads
volumes:
uploads:
driver: local
driver_opts:
type: none
o: bind
device: /path/on/host/to/wordpress/uploads
Run Code Online (Sandbox Code Playgroud)
这将提供命名卷的初始化属性。当您的主机目录为空时,泊坞窗将在容器创建时将/ var / www / html / wp-content / uploads中的映像内容复制到/ path / on / host / to / wordpress / uploads。
Docker的嵌套安装:如果您有多个嵌套的卷安装,则docker仍将从映像目录内容而不是从父卷复制。
这是该初始化的示例。从文件系统开始:
testvol/
data-image/
sub-dir/
from-image
data-submount/
Dockerfile
docker-compose.yml
Run Code Online (Sandbox Code Playgroud)
Dockerfile包含:
FROM busybox
COPY data-image/ /data
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml包含:
version: "2"
services:
test:
build: .
image: test-vol
command: find /data
volumes:
- data:/data
- subdir:/data/sub-dir
volumes:
data:
subdir:
driver: local
driver_opts:
type: none
o: bind
device: /path/on/host/test-vol/data-submount
Run Code Online (Sandbox Code Playgroud)
命名卷已初始化:
$ docker run -it --rm -v testvol_data:/data busybox find /data
/data
/data/sub-dir
/data/sub-dir/from-named-vol
Run Code Online (Sandbox Code Playgroud)
运行测试显示副本来了,from-image
而不是from-named-vol
:
$ docker-compose -f docker-compose.bind.yml up
...
Attaching to testvol_test_1
test_1 | /data
test_1 | /data/sub-dir
test_1 | /data/sub-dir/from-image
testvol_test_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)
docker已将其复制到主机文件系统:
$ ls -l data-submount/
total 0
-rw-r--r-- 1 root root 0 Jan 15 08:08 from-image
Run Code Online (Sandbox Code Playgroud)
Linux中的嵌套挂载:从您的问题出发,对于挂载本身在Linux中的工作方式似乎有些困惑。每个卷安装都在容器的安装名称空间中运行。该名称空间为容器提供了自己的文件系统树视图。将卷装载到该树中时,您无需修改父文件系统中的内容,它只是掩盖了该位置中父文件的内容。所有更改都直接在该新安装的目录中发生,如果要卸载它,则父目录将以其原始状态可见。
因此,如果将两个嵌套目录装入一个容器(例如/data
和)/data/a
,然后装入/data
第二个容器,则在第二个容器/data/a
的第一个容器中将看不到,只有其中的内容/data
存在,包括已装入的所有文件夹在上面。
归档时间: |
|
查看次数: |
2592 次 |
最近记录: |