Docker启动后再挂载目录
以MySQL容器为示例
1.需要关闭Docker服务
systemctl stop docker
2.准备挂载目录
# 创建挂载目录,自定义
mkdir /usr/local/mysql_config
# 创建MySQL的配置文件,这里也可以直接挂载目录,看自己需求
touch /usr/local/mysql_config/my.cnf
3.进入宿主机的容器目录
# 宿主机的容器路径
cd /var/lib/docker/containers/
# 查看当前容器目录
ls
## 我这里有五个容器
[root@localhost containers]# ls
121f35fb4abf7a424cb2413af9dd43698c9cef475ef873586121296b7409270d 2031dad679823430394425a53946cc6809b021f2f0854b512490d469faac1028 a077ae243bfac33f62bc5135e414121510b4f0860c00c64d22afdb83051e3d60
199491b3be9a0d3ca31ed88f403cda6d8d345ab8a056b618ad850729cff2e216 97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845
# 查看Docker启动的容器
docker images
## 可以看到五个容器,注意CONTAINER ID,对比上面的容器目录,可以看到CONTAINER ID跟上面目录的前一段是相同的,所以相同的一段就是改容器的目录
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
121f35fb4abf 5c62e459e087 "docker-entrypoint..." 58 minutes ago Exited (0) 5 minutes ago mysql_1
97cc3f4e08fd 5c62e459e087 "docker-entrypoint..." About an hour ago Up 10 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp mysql_test
199491b3be9a 4fc5fe6c8c09 "docker-entrypoint..." 5 weeks ago Exited (255) 4 weeks ago 4369/tcp, 0.0.0.0:5672->5672/tcp, 5671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit
2031dad67982 49c664c4f907 "/sbin/tini -- /us..." 2 months ago Exited (255) 5 weeks ago 50000/tcp, 0.0.0.0:10240->8080/tcp jenkins
a077ae243bfa 5c62e459e087 "docker-entrypoint..." 2 months ago Exited (255) 9 days ago 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
mysql
# 这里我是mysql_test容器,所以进入的是CONTAINER ID=97cc3f4e08fd的容器目录
cd 97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845
4.修改容器目录下的配置文件
# 查看容器目录下的文件 ls,主要修改的是hostconfig.json、config.v2.json文件
checkpoints config.v2.json hostconfig.json hostname hosts resolv.conf resolv.conf.hash secrets shm
(1).编辑 vi hostconfig.json
{"Binds":["/usr/local/mysql_config/my.cnf:/etc/mysql/conf.d/mysql.cnf"],"ContainerIDFile":"","LogConfig":{"Type":"journald","Config":{}},"NetworkMode":"default","PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3307"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"docker-runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":null,"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0}
# 注意:主要修改Binds,这里我已经添加了宿主机/usr/local/mysql_config/my.cnf,挂载到容器里的/etc/mysql/conf.d/mysql.cnf
(2).编辑vi config.v2.json
{"StreamConfig":{},"State":{"Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"RemovalInProgress":false,"Dead":false,"Pid":8371,"ExitCode":0,"Error":"","StartedAt":"2021-12-06T02:32:25.933774901Z","FinishedAt":"2021-12-06T02:31:52.626517025Z","Health":null},"ID":"97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845","Created":"2021-12-06T01:10:21.46030513Z","Managed":false,"Path":"docker-entrypoint.sh","Args":["mysqld"],"Config":{"Hostname":"97cc3f4e08fd","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"ExposedPorts":{"3306/tcp":{},"33060/tcp":{}},"Tty":true,"OpenStdin":true,"StdinOnce":false,"Env":["MYSQL_ROOT_PASSWORD=123456","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","GOSU_VERSION=1.12","MYSQL_MAJOR=8.0","MYSQL_VERSION=8.0.25-1debian10"],"Cmd":["mysqld"],"Image":"5c62e459e087","Volumes":{"/var/lib/mysql":{}},"WorkingDir":"","Entrypoint":["docker-entrypoint.sh"],"OnBuild":null,"Labels":{}},"Image":"sha256:5c62e459e087e3bd3d963092b58e50ae2af881076b43c29e38e2b5db253e0287","NetworkSettings":{"Bridge":"","SandboxID":"c62ac687dd649755ce204943b5fd36a41f9a50a9341468964c3b441a8decb34a","HairpinMode":false,"LinkLocalIPv6Address":"","LinkLocalIPv6PrefixLen":0,"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"c630c2e2f21205d13e4a919634f714ed09ac57764e3b8cc4fbead8711cfd66a3","EndpointID":"db6e5134f3f4449e3683a1d5b39ba3fd5a7e1c8679984a98f112781afbe309aa","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02","IPAMOperational":false}},"Service":null,"Ports":{"3306/tcp":[{"HostIp":"0.0.0.0","HostPort":"3307"}],"33060/tcp":null},"SandboxKey":"/var/run/docker/netns/c62ac687dd64","SecondaryIPAddresses":null,"SecondaryIPv6Addresses":null,"IsAnonymousEndpoint":false,"HasSwarmEndpoint":false},"LogPath":"","Name":"/mysql_test","Driver":"overlay2","MountLabel":"system_u:object_r:svirt_sandbox_file_t:s0:c570,c746","ProcessLabel":"system_u:system_r:svirt_lxc_net_t:s0:c570,c746","RestartCount":0,"HasBeenStartedBefore":true,"HasBeenManuallyStopped":false,"MountPoints":{
# 这里开始
"/etc/mysql/conf.d/mysql.cnf":{"Source":"/usr/local/mysql_config/my.cnf","Destination":"/etc/mysql/conf.d/mysql.cnf","RW":true,"Name":"","Driver":"","Type":"bind","Spec":{"Type":"bind","Source":"/usr/local/mysql_config/my.cnf","Target":"/etc/mysql/conf.d/mysql.cnf"},"SkipMountpointCreation":false}
# 这里结束
,"/var/lib/mysql":{"Source":"","Destination":"/var/lib/mysql","RW":true,"Name":"a1279850c438d1049607b82940ef287eed0e8c398f2d834cf174985fdb2f475a","Driver":"local","Type":"volume","ID":"6b7903d1aeab2d3b418e6f0993bd8324cfa671582a9dc70fad4f0d7af3fae070","Spec":{},"SkipMountpointCreation":false}},"SecretReferences":null,"AppArmorProfile":"","HostnamePath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/hostname","HostsPath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/hosts","ShmPath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/shm","ResolvConfPath":"/var/lib/docker/containers/97cc3f4e08fd0e74662cf24f3117465111310a5f2efb7c1e0e97ee9c2a8d5845/resolv.conf","SeccompProfile":"","NoNewPrivileges":false}
# 注意:这里主要修改MountPoint里的配置,这里我已经添加了/usr/local/mysql_config/my.cnf,参考示例去配置
5.启动Docker服务和容器
# 启动Docker
systemctl start docker
# 启动容器
docker start mysql_test
# 查看挂载目录是否改变
docker inspect mysql_test
## 挂载信息
"Mounts": [
{
"Type": "volume",
"Name": "a1279850c438d1049607b82940ef287eed0e8c398f2d834cf174985fdb2f475a",
"Source": "/var/lib/docker/volumes/a1279850c438d1049607b82940ef287eed0e8c398f2d834cf174985fdb2f475a/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
## 已改变
{
"Type": "bind",
"Source": "/usr/local/mysql_config/my.cnf",
"Destination": "/etc/mysql/conf.d/mysql.cnf",
"Mode": "",
"RW": true,
"Propagation": ""
}
]