转载:http://dl528888.blog.51cto.com/2382721/1613764
1
|
-
v
, --volume=[] Bind
mount
a volume (e.g., from the host: -
v
/host
:
/container
, from docker: -
v
/container
)
|
1
2
3
4
5
6
|
15:21:14
# ll /data/software/
total 19692
-rw-r--r-- 1 root root 1940 Nov 10 20:42 CentOS-Base-6.repo
-rwxr-xr-x 1 root root 12752168 Nov 10 14:15 etcd
-rwxr-xr-x 1 root root 7400424 Nov 10 14:15 etcdctl
drwxr-xr-x 21 1000 1000 4096 Oct 29 02:06 systemd-217
|
1
|
docker run -d -p 22 --name=
"test"
-
v
/data/software
:
/tmp/software
docker.ops-chukong.com:5000
/centos6-http
:new
/usr/bin/supervisord
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
root@docker-test2:
/tmp
15:29:23
# docker run -d -p 22 --name="test" -v /data/software:/tmp/software docker.ops-chukong.com:5000/centos6-http:new /usr/bin/supervisord
a21506d7b36e04e091008f4a326ac17c94e3d855e3aadb52992d7ba95f45cbbf
root@docker-test2:
/tmp
15:31:15
# docker-enter test sh -c "ls -l /tmp/software"
total 19692
-rw-r--r-- 1 root root 1940 Nov 10 20:42 CentOS-Base-6.repo
-rwxr-xr-x 1 root root 12752168 Nov 10 14:15 etcd
-rwxr-xr-x 1 root root 7400424 Nov 10 14:15 etcdctl
drwxr-xr-x 21 1000 1000 4096 Oct 29 02:06 systemd-217
root@docker-test2:
/tmp
15:31:21
# docker-enter test sh -c "mount"
rootfs on /
type
rootfs (rw)
/dev/mapper/docker-8
:17-37748738-a21506d7b36e04e091008f4a326ac17c94e3d855e3aadb52992d7ba95f45cbbf on /
type
ext4 (rw,relatime,discard,stripe=16,data=ordered)
proc on
/proc
type
proc (rw,nosuid,nodev,noexec,relatime)
sysfs on
/sys
type
sysfs (rw,nosuid,nodev,noexec,relatime)
shm on
/dev/shm
type
tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
/dev/sdb1
on /.dockerinit
type
ext4 (rw,relatime,data=ordered)
/dev/sda3
on
/etc/resolv
.conf
type
ext4 (rw,relatime,data=ordered)
/dev/sdb1
on
/etc/hostname
type
ext4 (rw,relatime,data=ordered)
/dev/sdb1
on
/etc/hosts
type
ext4 (rw,relatime,data=ordered)
/dev/sda3
on
/tmp/software
type
ext4 (rw,relatime,data=ordered)
/dev/sdb1
on /.dockerenv
type
ext4 (rw,relatime,data=ordered)
devpts on
/dev/tty1
type
devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
devpts on
/dev/pts
type
devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
devpts on
/dev/ptmx
type
devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
root@docker-test2:
/tmp
15:31:28
# docker-enter test sh -c "df -h"
Filesystem Size Used Avail Use% Mounted on
rootfs 9.8G 470M 8.8G 5% /
/dev/mapper/docker-8
:17-37748738-a21506d7b36e04e091008f4a326ac17c94e3d855e3aadb52992d7ba95f45cbbf
9.8G 470M 8.8G 5% /
shm 64M 0 64M 0%
/dev/shm
/dev/sdb1
1.8T 22G 1.7T 2% /.dockerinit
/dev/sda3
518G 457G 35G 93%
/etc/resolv
.conf
/dev/sdb1
1.8T 22G 1.7T 2%
/etc/hostname
/dev/sdb1
1.8T 22G 1.7T 2%
/etc/hosts
/dev/sda3
518G 457G 35G 93%
/tmp/software
/dev/sdb1
1.8T 22G 1.7T 2% /.dockerenv
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/bin/bash
#This script is dynamic mount docker volumens
#Author Deng Lei
if
[ -z $1 ] || [ -z $2 ] || [ -z $3 ];
then
echo
"Usage: container_name physics_volumes container_volumes"
echo
"Example: I want mount physics /tmp/test to container /src in test"
echo
"The command is: bash `basename $0` test /tmp/test /src "
exit
1
fi
which
nsenter &>>
/dev/null
if
[ $? -
ne
0 ];
then
echo
"plsease install nsenser,command is:yum install util-linux"
exit
1
fi
set
-e
CONTAINER=$1
HOSTPATH=$2
CONTPATH=$3
if
[ ! -d $HOSTPATH ];
then
echo
"physics $HOSTPATH is not exist!"
exit
1
fi
REALPATH=$(readlink --canonicalize $HOSTPATH)
FILESYS=$(
df
-P $REALPATH |
tail
-n 1 |
awk
'{print $6}'
)
while
read
DEV MOUNT JUNK
do
[ $MOUNT = $FILESYS ] && [ $DEV !=
"rootfs"
] &&
break
done
<
/proc/mounts
[ $MOUNT = $FILESYS ]
# Sanity check!
while
read
A B C SUBROOT MOUNT JUNK
do
[ $MOUNT = $FILESYS ] &&
break
done
<
/proc/self/mountinfo
[ $MOUNT = $FILESYS ]
# Moar sanity check!
SUBPATH=$(
echo
$REALPATH |
sed
s,^$FILESYS,,)
DEVDEC=$(
printf
"%d %d"
$(stat --
format
"0x%t 0x%T"
$DEV))
PID=$(docker inspect --
format
"{{.State.Pid}}"
"$CONTAINER"
)
run_command=
"nsenter --target $PID --mount --uts --ipc --net --pid -- sh -c"
if
[ `$run_command
"mount|grep $CONTPATH|wc -l"
` -
ne
0 ];
then
echo
"container $CONTAINER mount dir $CONTPATH is mounting!"
exit
1
fi
$run_command
"[ -b $DEV ] ||mknod --mode 0600 $DEV b $DEVDEC"
$run_command
"mkdir /tmpmnt"
$run_command
"mount $DEV /tmpmnt"
$run_command
"mkdir -p $CONTPATH"
$run_command
"mount -o bind /tmpmnt/$SUBROOT/$SUBPATH $CONTPATH"
$run_command
"umount /tmpmnt"
$run_command
"rmdir /tmpmnt"
check_result=`$run_command
"mount|grep $CONTPATH|wc -l"
`
if
[ $check_result -
ne
0 ];
then
echo
"dymainc mount physics $HOSTPATH on $CONTAINER $CONTPATH is success!"
else
echo
"dymaninc mount physics $HOSTPATH on $CONTAINER $CONTPATH is fail!"
fi
|
1
2
3
4
5
|
root@docker-test2:
/tmp
15:37:17
# ll /data/docker-dir/
total 4
-rw-r--r-- 1 root root 0 Feb 11 09:31 a
-rw-r--r-- 1 root root 2 Feb 11 09:31 b
|
1
2
3
4
|
15:38:28
# sh dynamic_mount_docker_volume.sh
Usage: container_name physics_volumes container_volumes
Example: I want
mount
physics
/tmp/test
to container
/src
in
test
The
command
is:
bash
dynamic_mount_docker_volume.sh
test
/tmp/test
/src
|
1
2
3
|
root@docker-test2:
/tmp
15:36:14
# sh dynamic_mount_docker_volume.sh test /data/docker-dir/ /tmp/docker-dir
dymainc
mount
physics
/data/docker-dir/
on
test
/tmp/docker-dir
is success!
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
15:37:28
# docker-enter test sh -c "ls -l /tmp/docker-dir"
total 4
-rw-r--r-- 1 root root 0 Feb 11 09:31 a
-rw-r--r-- 1 root root 2 Feb 11 09:31 b
root@docker-test2:
/tmp
15:38:18
# docker-enter test sh -c "mount"
rootfs on /
type
rootfs (rw)
/dev/mapper/docker-8
:17-37748738-a21506d7b36e04e091008f4a326ac17c94e3d855e3aadb52992d7ba95f45cbbf on /
type
ext4 (rw,relatime,discard,stripe=16,data=ordered)
proc on
/proc
type
proc (rw,nosuid,nodev,noexec,relatime)
sysfs on
/sys
type
sysfs (rw,nosuid,nodev,noexec,relatime)
shm on
/dev/shm
type
tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k)
/dev/sdb1
on /.dockerinit
type
ext4 (rw,relatime,data=ordered)
/dev/sda3
on
/etc/resolv
.conf
type
ext4 (rw,relatime,data=ordered)
/dev/sdb1
on
/etc/hostname
type
ext4 (rw,relatime,data=ordered)
/dev/sdb1
on
/etc/hosts
type
ext4 (rw,relatime,data=ordered)
/dev/sda3
on
/tmp/software
type
ext4 (rw,relatime,data=ordered)
/dev/sdb1
on /.dockerenv
type
ext4 (rw,relatime,data=ordered)
devpts on
/dev/tty1
type
devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
devpts on
/dev/pts
type
devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
devpts on
/dev/ptmx
type
devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
/dev/sda3
on
/tmp/docker-dir
type
ext4 (rw,relatime,data=ordered)
root@docker-test2:
/tmp
15:38:24
# docker-enter test sh -c "df -h"
Filesystem Size Used Avail Use% Mounted on
rootfs 9.8G 470M 8.8G 5% /
/dev/mapper/docker-8
:17-37748738-a21506d7b36e04e091008f4a326ac17c94e3d855e3aadb52992d7ba95f45cbbf
9.8G 470M 8.8G 5% /
shm 64M 0 64M 0%
/dev/shm
/dev/sdb1
1.8T 22G 1.7T 2% /.dockerinit
/dev/sda3
518G 457G 35G 93%
/etc/resolv
.conf
/dev/sdb1
1.8T 22G 1.7T 2%
/etc/hostname
/dev/sdb1
1.8T 22G 1.7T 2%
/etc/hosts
/dev/sda3
518G 457G 35G 93%
/tmp/software
/dev/sdb1
1.8T 22G 1.7T 2% /.dockerenv
/dev/sda3
518G 457G 35G 93%
/tmp/docker-dir
|
1
2
|
16:23:27
# sh dynamic_mount_docker_volume.sh test123 /data/docker-dir/ /src
Error: No such image or container: test123
|
1
2
3
|
root@docker-test2:
/tmp
15:39:18
# sh dynamic_mount_docker_volume.sh test /tmp/sfsdfdf1 /src
physics
/tmp/sfsdfdf1
is not exist!
|
1
2
|
15:44:25
# sh dynamic_mount_docker_volume.sh test /data/software/ /src
container
test
mount
dir
/src
is mounting!
|