本文主要是介绍Docker 持久化存储 Bind mounts,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Docker 持久化存储 Bind mounts
- Bind mounts 的 -v 与 --mount 区别
- 启动容器基于bind mount
- 挂载到容器中的非空目录
- 只读 bind mount
- compose 中使用 bind mount
官方文档:https://docs.docker.com/storage/bind-mounts/
Bind mounts 的 -v 与 --mount 区别
- 如果使用
-v
或--volume
绑定挂载 Docker主机上尚不存在的文件或目录,-v
将自动创建一个目录
。 - 如果使用
--mount
绑定挂载Docker主机上尚不存在的文件或目录,Docker不会自动创建它,而是会生成一个错误。
启动容器基于bind mount
- 启动容器基于
bind mount
--mount
docker run -d \-it \--name devtest \--mount type=bind,source="$(pwd)"/target,target=/app \nginx:latest
-v
docker run -d \-it \--name devtest \-v "$(pwd)"/target:/app \nginx:latest
- 使用
docker inspect devtest
查看详情中的Mounts
部分。"Mounts": [{"Type": "bind","Source": "/tmp/source/target","Destination": "/app","Mode": "","RW": true,"Propagation": "rprivate"} ],
挂载到容器中的非空目录
- 如果将目录绑定挂载到容器上的非空目录中,则绑定挂载会遮挡该目录的现有内容。
- 益处:在不构建新镜像的情况下,测试应用程序的新版本。
- 弊处:如果将容器的
/usr
替换成主机上的/tmp
, 在大多数情况下,会导致容器无法正常启动。--mount
docker run -d \-it \--name broken-container \--mount type=bind,source=/tmp,target=/usr \nginx:latestdocker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "exec: \"nginx\": executable file not found in $PATH".
-v
docker run -d \-it \--name broken-container \-v /tmp:/usr \nginx:latestdocker: Error response from daemon: oci runtime error: container_linux.go:262: starting container process caused "exec: \"nginx\": executable file not found in $PATH".
容器已经创建但是未启动,用
docker container rm broken-container
删除。
只读 bind mount
- 创建
--mount
docker run -d \-it \--name devtest \--mount type=bind,source="$(pwd)"/target,target=/app,readonly \nginx:latest
-v
docker run -d \-it \--name devtest \-v "$(pwd)"/target:/app:ro \nginx:latest
- 用
docker inspect devtest
查看详情Mounts
部分"Mounts": [{"Type": "bind","Source": "/tmp/source/target","Destination": "/app","Mode": "ro","RW": false,"Propagation": "rprivate"} ],
compose 中使用 bind mount
version: "3.9"
services:frontend:image: node:ltsvolumes:- type: bindsource: ./statictarget: /opt/app/static
volumes:myapp:
这篇关于Docker 持久化存储 Bind mounts的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!