docker容器挂载目录
#拉取镜像 docker pull registry.cn-beijing.aliyuncs.com/test/ovn-gw:22.06.0-ubuntu1
#查看iamges
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-beijing.aliyuncs.com/test/ovn-gw 22.06.0-ubuntu1 40624ba13f79 8 days ago 862MB
#运行容器,并挂载需要的目录-v,赋予权限--privileged,(host下的/usr/bin有python,容器没有,所以找了一个在path下的空目录挂载)
docker run -itd --name=gw --net=host --privileged -v /usr/bin:/usr/local/bin -v /tmp:/tmp -v /dev:/dev -v /root:/root -v /home:/home -v /var/run/openvswitch:/var/run/openvswitch -v /etc/openvswitch:/etc/openvswitch -v /lib:/lib registry.cn-beijing.aliyuncs.com/test/ovn-gw:22.06.0-ubuntu1
#查看容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae5e437dbe36 registry.cn-beijing.aliyuncs.com/test/ovn-gw:22.06.0-ubuntu1 "/bin/bash" 34 minutes ago Up 34 minutes gw
#docker run参数解释
docker run -itd --name=gw --net=host --privileged -v /usr/bin:/usr/local/bin -v /tmp:/tmp -v /dev:/dev -v /root:/root -v /home:/home -v /var/run/openvswitch:/var/run/openvswitch -v /etc/openvswitch:/etc/openvswitch -v /lib:/lib registry.cn-beijing.aliyuncs.com/test/ovn-gw:22.06.0-ubuntu1
--net=host: 使用主机网络模式,容器将与主机共享网络命名空间
--privileged: 提供容器内的特权访问,允许容器对主机的一些功能进行更高级别的访问
-v /usr/bin:/usr/local/bin: 将主机上的/usr/bin目录挂载到容器内的/usr/local/bin目录,实现主机和容器之间的文件共享。
如何为已经启动的docker容器挂载目录?
上述已经使用docker run起了一个容器,发现没有modprobe模块,需要下载
但是容器没有网络,无法下载,而主机上有modprobe,which modprobe找到模块路径,直接挂载
modprobe在/usr/sbin下
#找到容器所在位置
root@server007-gw:~# docker info |grep Root
Docker Root Dir: /var/lib/docker
#停止容器
root@server007-gw:~# docker stop gw
#停止docker
root@server007-gw:~# systemctl stop docker
#修改容器中的config.v2.json文件,找到MountPoints,添加/usr/sbin的映射,可以复制其他的修改即可,可使用python的json工具格式化成json形式方便查看:%!python3 -m json.tool
root@server007-gw:/var/lib/docker/containers/cc4bba99579a80ba531712641f632ba6d57d565564b255b69e85047c3425ba50# vim config.v2.json
{
......
"MountPoints": {
......
"/usr/local/sbin": {
"Source": "/usr/sbin",
"Destination": "/usr/local/sbin",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/usr/sbin",
"Target": "/usr/local/sbin"
},
"SkipMountpointCreation": false
},
......
}
#修改hostconfig.json,在Binds中添加映射,"/usr/sbin:/usr/local/sbin"
root@server007-gw:/var/lib/docker/containers/cc4bba99579a80ba531712641f632ba6d57d565564b255b69e85047c3425ba50# vim hostconfig.json
{
"Binds": [
"/etc/openvswitch:/etc/openvswitch",
"/lib:/lib",
"/usr/bin:/usr/local/bin",
"/usr/sbin:/usr/local/sbin",
"/tmp:/tmp",
"/dev:/dev",
"/root:/root",
"/home:/home",
"/var/run/openvswitch:/var/run/openvswitch"
......
}
#启动docker和容器
root@server007-gw:~# systemctl start docker
root@server007-gw:~# docker start gw
#进入容器查看是否挂载上,
root@server007-gw:~# docker exec gw ls /usr/local/sbin