1.绑定挂载主机上的目录
1.准备源代码目录并切换到 source 目录
[root@host1 ~]# mkdir -p source/target && cd source
2.启动容器并将主机上的 source/target 目录挂载到容器的 /app 目录中
[root@host1 source]# docker run -dit --name devtest --mount type=bind,source="$(pwd)"/target,target=/app nginx
1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4
3.查看该容器的详细信息
[root@host1 source]# docker inspect devtest
[{"Id": "1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4","Created": "2025-09-12T06:44:16.776281072Z","Path": "/docker-entrypoint.sh","Args": ["nginx","-g","daemon off;"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 589503,"ExitCode": 0,"Error": "","StartedAt": "2025-09-12T06:44:16.793372395Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:41f689c209100e6cadf3ce7fdd02035e90dbd1d586716bf8fc6ea55c365b2d81","ResolvConfPath": "/var/lib/docker/containers/1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4/resolv.conf","HostnamePath": "/var/lib/docker/containers/1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4/hostname","HostsPath": "/var/lib/docker/containers/1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4/hosts","LogPath": "/var/lib/docker/containers/1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4/1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4-json.log","Name": "/devtest","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "bridge","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"ConsoleSize": [36,101],"CapAdd": null,"CapDrop": null,"CgroupnsMode": "private","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": [],"BlkioDeviceWriteBps": [],"BlkioDeviceReadIOps": [],"BlkioDeviceWriteIOps": [],"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": null,"PidsLimit": null,"Ulimits": [],"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"Mounts": [{"Type": "bind","Source": "/root/source/target","Target": "/app"}],"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/interrupts","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware","/sys/devices/virtual/powercap"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"ID": "1599e5dd1b6e6f86c7f32f7648552e9b4193ac8a5a1fa17f076d10c4cb410dd4","LowerDir": "/var/lib/docker/overlay2/c23358462a341ce93b911a7dcf92d8f12bca833e95a1de7357ede5911534f4ac-init/diff:/var/lib/docker/overlay2/8b57d2f007b17a853b402d7981962ae0217011bd75f8f4aa6ec1288aebb0dc7e/diff:/var/lib/docker/overlay2/7c5719df2bf53f07bea95c0dab086a15fc9c3b85bea2225098d49d78a8a766e8/diff:/var/lib/docker/overlay2/5a31009658ea6524de00dca63c21fc65f89a0e88be6264074c0ea65be9bfd24c/diff:/var/lib/docker/overlay2/6655e09d62aa340b5368fe6a07108907f813224356ee4cfa7a8cfa802ec87e66/diff:/var/lib/docker/overlay2/23c934857988d94756762e22771276121b35cab43c4549582e8d7d54d2c7ecf1/diff:/var/lib/docker/overlay2/7959c6d39ca832474bf8aba5077a8d407f7f4d087a8c8480d8c282e0deae1ad1/diff:/var/lib/docker/overlay2/ca8efaabeb43dce901c82c3111b6f5d376ee91641aa5c3268760982d8552d4d1/diff","MergedDir": "/var/lib/docker/overlay2/c23358462a341ce93b911a7dcf92d8f12bca833e95a1de7357ede5911534f4ac/merged","UpperDir": "/var/lib/docker/overlay2/c23358462a341ce93b911a7dcf92d8f12bca833e95a1de7357ede5911534f4ac/diff","WorkDir": "/var/lib/docker/overlay2/c23358462a341ce93b911a7dcf92d8f12bca833e95a1de7357ede5911534f4ac/work"},"Name": "overlay2"},"Mounts": [{"Type": "bind","Source": "/root/source/target","Destination": "/app","Mode": "","RW": true,"Propagation": "rprivate"}],"Config": {"Hostname": "1599e5dd1b6e","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": true,"OpenStdin": true,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.29.1","NJS_VERSION=0.9.1","NJS_RELEASE=1~bookworm","PKG_RELEASE=1~bookworm","DYNPKG_RELEASE=1~bookworm"],"Cmd": ["nginx","-g","daemon off;"],"Image": "nginx","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"NetworkSettings": {"Bridge": "","SandboxID": "957dbab5cdda73dce6a02534f9cec48834fe69db27c01ac1e4e68418ce61fdd9","SandboxKey": "/var/run/docker/netns/957dbab5cdda","Ports": {"80/tcp": null},"HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "75ec2950f056ab28a7dac657e8eb7ff16524d8f9802d15e8829264bfe371db2b","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "ba:db:0e:4e:4c:f6","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"MacAddress": "ba:db:0e:4e:4c:f6","DriverOpts": null,"GwPriority": 0,"NetworkID": "2dba964368f785973cac101f2112a37a034ddf1667583203846b25e06839cac9","EndpointID": "75ec2950f056ab28a7dac657e8eb7ff16524d8f9802d15e8829264bfe371db2b","Gateway": "172.17.0.1","IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"DNSNames": null}}}}
]
4.停止并删除实验所用的容器
[root@host1 source]# docker stop devtest && docker rm devtest
devtest
devtest
5.实现只读绑定挂载
[root@host1 source]# docker run -d -it --name devtest --mount type=bind,source="$(pwd)"/target,target=/app,readonly nginx
bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e
6.查看容器详细信息
[root@host1 source]# docker inspect devtest
[{"Id": "bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e","Created": "2025-09-12T06:47:39.701174343Z","Path": "/docker-entrypoint.sh","Args": ["nginx","-g","daemon off;"],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 618477,"ExitCode": 0,"Error": "","StartedAt": "2025-09-12T06:47:39.712819264Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:41f689c209100e6cadf3ce7fdd02035e90dbd1d586716bf8fc6ea55c365b2d81","ResolvConfPath": "/var/lib/docker/containers/bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e/resolv.conf","HostnamePath": "/var/lib/docker/containers/bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e/hostname","HostsPath": "/var/lib/docker/containers/bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e/hosts","LogPath": "/var/lib/docker/containers/bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e/bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e-json.log","Name": "/devtest","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "bridge","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"ConsoleSize": [36,101],"CapAdd": null,"CapDrop": null,"CgroupnsMode": "private","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": [],"BlkioDeviceWriteBps": [],"BlkioDeviceReadIOps": [],"BlkioDeviceWriteIOps": [],"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": null,"PidsLimit": null,"Ulimits": [],"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"Mounts": [{"Type": "bind","Source": "/root/source/target","Target": "/app","ReadOnly": true}],"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/interrupts","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware","/sys/devices/virtual/powercap"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"ID": "bd45f0ce1c065d378a00542cc50581ea0990817c35e2f4041a8b67d39b22b04e","LowerDir": "/var/lib/docker/overlay2/964c799cdee120079cc6306646839a22ea7071e9defc18e707d860b1538e2ed1-init/diff:/var/lib/docker/overlay2/8b57d2f007b17a853b402d7981962ae0217011bd75f8f4aa6ec1288aebb0dc7e/diff:/var/lib/docker/overlay2/7c5719df2bf53f07bea95c0dab086a15fc9c3b85bea2225098d49d78a8a766e8/diff:/var/lib/docker/overlay2/5a31009658ea6524de00dca63c21fc65f89a0e88be6264074c0ea65be9bfd24c/diff:/var/lib/docker/overlay2/6655e09d62aa340b5368fe6a07108907f813224356ee4cfa7a8cfa802ec87e66/diff:/var/lib/docker/overlay2/23c934857988d94756762e22771276121b35cab43c4549582e8d7d54d2c7ecf1/diff:/var/lib/docker/overlay2/7959c6d39ca832474bf8aba5077a8d407f7f4d087a8c8480d8c282e0deae1ad1/diff:/var/lib/docker/overlay2/ca8efaabeb43dce901c82c3111b6f5d376ee91641aa5c3268760982d8552d4d1/diff","MergedDir": "/var/lib/docker/overlay2/964c799cdee120079cc6306646839a22ea7071e9defc18e707d860b1538e2ed1/merged","UpperDir": "/var/lib/docker/overlay2/964c799cdee120079cc6306646839a22ea7071e9defc18e707d860b1538e2ed1/diff","WorkDir": "/var/lib/docker/overlay2/964c799cdee120079cc6306646839a22ea7071e9defc18e707d860b1538e2ed1/work"},"Name": "overlay2"},"Mounts": [{"Type": "bind","Source": "/root/source/target","Destination": "/app","Mode": "","RW": false,"Propagation": "rprivate"}],"Config": {"Hostname": "bd45f0ce1c06","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": true,"OpenStdin": true,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.29.1","NJS_VERSION=0.9.1","NJS_RELEASE=1~bookworm","PKG_RELEASE=1~bookworm","DYNPKG_RELEASE=1~bookworm"],"Cmd": ["nginx","-g","daemon off;"],"Image": "nginx","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"NetworkSettings": {"Bridge": "","SandboxID": "cac1d4a94376b13569a6f4a30fcc97f5b55e042384fb4f888dacc1309965f3fd","SandboxKey": "/var/run/docker/netns/cac1d4a94376","Ports": {"80/tcp": null},"HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "212e9de008980f22ed7ffe5913edc3389372b069a484eb2926c9ce18ed8639f0","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "46:15:b4:8a:6f:d9","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"MacAddress": "46:15:b4:8a:6f:d9","DriverOpts": null,"GwPriority": 0,"NetworkID": "2dba964368f785973cac101f2112a37a034ddf1667583203846b25e06839cac9","EndpointID": "212e9de008980f22ed7ffe5913edc3389372b069a484eb2926c9ce18ed8639f0","Gateway": "172.17.0.1","IPAddress": "172.17.0.3","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"DNSNames": null}}}}
]
7.停止并删除实验所用的容器
[root@host1 source]# docker stop devtest && docker rm devtest
devtest
devtest
2.绑定挂载主机上的文件
[root@host1 ~]# docker run --rm -it -v/etc/localtime:/etc/localtime ubuntu /bin/bash
root@cf8eceac7f76:/# date -R
Fri, 12 Sep 2025 14:56:13 +0800
root@cf8eceac7f76:/# exit
exit
3.绑定挂载主机上不存在的目录或文件
[root@host1 ~]# docker run --rm -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash
root@93e7e5614d4d:/foo# exit
exit
[root@host1 ~]# ls -l /doesnt
总用量 0
drwxr-xr-x. 2 root root 6 9月 12 15:00 exist
4.绑定挂载到容器中的非空目录
[root@host1 ~]# docker run -d -it --name broken-container --mount type=bind,source=/tmp,target=/usr nginx
649c895a6159a2d6d002f328faa311a480c10e7d613bbd5a0041e162e13f4392
[root@host1 ~]# docker container rm broken-container
broken-container