#1.从宿主机向容器中复制文件

[root@localhost data]# sudo docker cp aa.txt ssh001:/data

把当前目录下的aa.txt复制到容器名称为【ssh001】的data目录下

#2.有一项重要的参数 -v 目录挂载,就是让容器内部目录和宿主主机目录关联起来,这样就可以直接操作宿主主机目录而不用再操作具体容器了

 

关于Docker目录挂载的总结

Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。

譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:

# docker run -it -v /test:/soft centos /bin/bash

这样在容器启动后,容器内会自动创建/soft的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。

貌似简单,其实不然,下面我们来验证一下:

一、容器目录不可以为相对路径

[root@localhost ~]# docker run -it -v /test:soft centos /bin/bash
invalid value "/test:soft" for flag -v: soft is not an absolute path
See 'docker run --help'.

直接报错,提示soft不是一个绝对路径,所谓的绝对路径,必须以下斜线“/”开头。

二、宿主机目录如果不存在,则会自动生成

如果宿主机中存在/test目录,首先删除它

[root@localhost ~]# rm -rf /test
[root@localhost ~]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

启动容器

[root@localhost ~]# docker run -it -v /test:/soft centos /bin/bash
[root@a487a3ca7997 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  soft  srv  sys  tmp  usr  var

查看宿主机,发现新增了一个/test目录

[root@localhost ~]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var

----------------------------------------------------------------------------------------------------------------------------------

修改某个容器和宿主机的共享目录,以及端口映射

已启动的容器目录挂载

# stop docker server
systemctl stop docker

cd /var/lib/docker/containers/containerId/

vim hostconfig.json
"PortBindings":{"22/tcp":[{"HostIp":"","HostPort":"2201"}]}

vim config.v2.json
"ExposedPorts":{"22/tcp":{}},"Ports":{"22/tcp":[{"HostIp":"0.0.0.0","HostPort":"2201"}]}

------------------挂载开始------------

vim hostconfig.json
"Binds":["/home/visi/ws/data:/data"]

vim config.v2.json
没挂载"MountPoints":{}

挂载后:

"MountPoints":{"/data":{"Source":"/home/lsl/data","Destination":"/lsl/data","RW":true,"Name":"","Driver":"","Type":"bind","Relabel":"rw","Propagation":"rprivate","Spec":{"Type":"bind","Source":"/home/lsl/data","Target":"/lsl/data"},"SkipMountpointCreation":false}}

------------------挂载结束------------

# start docker server
systemctl start docker
 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐