三步测试 docker 中的挂载卷 /var/run/docker.sock,在容器内执行 docker 命令

参考欣宸文章:docker的/var/run/docker.sock参数
下面只做测试,更多内容看他的文章

三步测试

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
# 测试1:交互式启动容器,进入容器,执行 docker 命令
------------------------docker ps -a | grep centos
------------------------docker run --name centos01 -itd centos
ff82f2cb7023af21a9ff3190af8f59d9bc1676f86d48a6e89efd035cc96c67cf
------------------------docker exec -it centos01 bash
[root@ff82f2cb7023 /]# docker ps #===> 命令不存在
bash: docker: command not found
[root@ff82f2cb7023 /]# exit
exit
------------------------
------------------------
------------------------
# 测试2:删除容器,再启动容器,挂载 docker 命令执行文件,再进入容器测试
------------------------docker rm -f centos01
centos01
------------------------docker run --name centos01 -v $(which docker):/usr/bin/docker -itd centos
546a4ab20257b1538907ba39bf16b61f6c21bec9c22661fc532483559443bbb9
------------------------
------------------------docker ps -a | grep centos
546a4ab20257 centos "/bin/bash" 9 seconds ago Up 8 seconds centos01
------------------------docker exec -it centos01 bash
[root@546a4ab20257 /]# docker ps #===> 守护进程是否正在运行?
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@546a4ab20257 /]# exit
exit
------------------------
------------------------
# 测试3:删除容器,再启动容器,这次连带把守护进程也挂载,再进入容器测试
------------------------docker rm -f centos01
centos01
------------------------docker run --name centos01 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -itd centos
026dd1aded4cc312091400be907310727e9ec385f2f49446b9756f2b1d910755
------------------------docker ps -a | grep centos
026dd1aded4c centos "/bin/bash" 4 seconds ago Up 3 seconds centos01
------------------------docker exec -it centos01 bash
[root@026dd1aded4c /]# docker ps #===> 执行成功,在容器内执行的哦。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
026dd1aded4c centos "/bin/bash" 14 seconds ago Up 13 seconds centos01
5a5c972c7eb3 wurstmeister/kafka "start-kafka.sh" 44 minutes ago Up 44 minutes 0.0.0.0:9092->9092/tcp kafka01
39090de45eca wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 44 minutes ago Up 44 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp zookeeper01
65cde980ee00 mysql "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp, 33060/tcp mysql01
1044d0e07bf8 redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp redis01
[root@026dd1aded4c /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0d120b6ccaa8 3 months ago 215MB
[root@026dd1aded4c /]# exit
exit

测试 vim

上面的 docker 命令都可以挂载了,那么类似于其他命令 vim 这种也可以挂载吗?

答:不可以~!!!
若 vim 不依赖于其他文件而独立存在就可以,若依赖其他文件,也要把其他文件也挂载进去才可以,否则造成档案缺失,致使命令无法正常执行。

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
# 测试1:重新进入容器,看是否可以使用 vim 命令
------------------------docker rm -f centos01
centos01
------------------------docker run --name centos01 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -itd centos
039cd33b2e6e14c078d04763968cea6124aa043b47752adb4bce106ee9d1f8d7
------------------------
------------------------docker exec -it centos01 bash
[root@039cd33b2e6e /]# vim /etc/bashrc #===> 不能使用
bash: vim: command not found
[root@039cd33b2e6e /]# exit
exit
------------------------
# 测试2:删除容器,再把 vim 命令的执行文件挂载上,看看能不能执行
------------------------docker rm -f centos01
centos01
------------------------
------------------------docekr run --name centos01 -v ():-itd centos ^C
------------------------
------------------------which vim
/usr/bin/vim
------------------------
------------------------docker run --name centos01 -v $(which vim):/usr/bin/vim -itd centos
5d4548c00ba15cadf154aa0e1941d5890fd2064e8386aa7a5c5d16df7b2f7022
------------------------
------------------------
------------------------docker exec -it centos01 bash
[root@5d4548c00ba1 /]# vim /etc/bashrc #===> 不能执行,档案缺失
vim: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
[root@5d4548c00ba1 /]# exit
exit