docker如何对已经启动的容器添加目录映射(挂载目录)

 更新时间:2023年02月21日 16:37:11   作者:alwaysonline819  
当我们创建容器之后,不可避免会遇到修改配置文件的操作,下面这篇文章主要给大家介绍了关于docker如何对已经启动的容器添加目录映射(挂载目录)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

1. 背景

在自己安装sharding-proxy时,使用docker run -v的方式启动时,只挂载了/opt/shardingsphere-proxy/conf/opt/shardingsphere-proxy/ext-lib这两个目录,忘记挂载/opt/shardingsphere-proxy/logs日志目录,导致每次查看都得要进入容器内部去查看,很是麻烦,于是考虑如何在不删除容器重新启动部署的情况下进行新目录的映射与挂载

2. 开始新增挂载目录

1.查看容器存放目录

[root@iZ2zedqr9yeos47fg4uor5Z proxy-a]# docker info | grep 'Root'
 Docker Root Dir: /var/lib/docker
[root@iZ2zedqr9yeos47fg4uor5Z proxy-a]#

2.查看要新增挂载的容器id

[root@iZ2zedqr9yeos47fg4uor5Z proxy-a]# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED       STATUS          PORTS                               NAMES
6f5f3c195304   apache/shardingsphere-proxy:5.1.1   "/bin/sh -c '${LOCAL…"   4 days ago    Up 9 minutes    0.0.0.0:3321->3307/tcp              server-proxy-a

3.进入要新增文件夹挂载的目录

[root@iZ2zedqr9yeos47fg4uor5Z proxy-a]# docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED       STATUS          PORTS                               NAMES
6f5f3c195304   apache/shardingsphere-proxy:5.1.1   "/bin/sh -c '${LOCAL…"   4 days ago    Up 11 minutes   0.0.0.0:3321->3307/tcp              server-proxy-a
[root@iZ2zedqr9yeos47fg4uor5Z proxy-a]# cd /var/lib/docker/containers/
[root@iZ2zedqr9yeos47fg4uor5Z containers]# ll
total 64
drwx------ 4 root root 4096 Nov  7 14:20 1d0c21204385f60fa8859b0ff199569988218e449155634470cfb14ff2ceebf9
drwx------ 4 root root 4096 Nov  7 14:20 21a5f8b6e68ee09f8f80381c536b38abec1b8dcb81c69f1c50caeb95e8ebb35f
drwx------ 4 root root 4096 Nov  7 14:20 28242c9fd16bd610880d42a773e078221a0d34b1c779935fc0c8609a1b63666a
drwx------ 4 root root 4096 Nov  7 14:22 2bc290c8e158229fdc5291a3ea53c5721f5becd39c8cb47cb2f826f6349ac778
drwx------ 4 root root 4096 Nov  7 14:20 2fc0e1b1031abe6b1871332b971ccdc40185b7441e94ba3c266f51d2d4728412
drwx------ 4 root root 4096 Nov  7 14:20 3124c345f129a3c542423c68061c6ded5b41a649b25991125c8e81da7b010e7e
drwx------ 4 root root 4096 Nov  7 14:20 4a1e699a3711b92918f711d7ab021a5ac62bab1b8353ed321337c6f94ac50533
drwx------ 4 root root 4096 Nov  7 14:20 4cdc6456250a922e60f3394b26064be0541f04a0c34825c6487e73ed7979705a
drwx------ 4 root root 4096 Nov  7 14:20 53d710c37c08b9c2ab0c84fea2059d067bbcbc38f22aa2e654e1c62758b1df44
drwx------ 4 root root 4096 Nov  7 14:41 6f5f3c1953044043672723cdf4f3725c500e77a54e07cd0a4759371c04c0cfa1
drwx------ 4 root root 4096 Nov  7 14:20 73cc941fd394d42b8cbdc8fd7a50fc098b5d56c0323e5b9a786703d21a102d33
drwx------ 4 root root 4096 Nov  7 14:35 8dc6124199b0ef6afbc9d2b542c5a46c8767e7daafd52bfedd53a83491e17db0
drwx------ 4 root root 4096 Nov  7 14:20 9c554d94d5eb6c2c6015994b52ae3f3c31d182dde189d86427840b4a1c5d6477
drwx------ 4 root root 4096 Nov  7 14:20 a073fcd724623a98168564707dccfb9562d94d89c0882ad2fd92798a2137be0d
drwx------ 4 root root 4096 Nov  7 14:21 b1191679d1ecea73a74f44ee74b33281fbcccc942307630db02f2cb9e86869d0
drwx------ 4 root root 4096 Nov  7 14:20 eb30519b4804f9ca3c708260e885f99d693332af4a162a956952b601332fed97
[root@iZ2zedqr9yeos47fg4uor5Z containers]# cd 6f5f3c1953044043672723cdf4f3725c500e77a54e07cd0a4759371c04c0cfa1/
[root@iZ2zedqr9yeos47fg4uor5Z 6f5f3c1953044043672723cdf4f3725c500e77a54e07cd0a4759371c04c0cfa1]# ll
total 488
-rw-r----- 1 root root 461990 Nov  7 14:41 6f5f3c1953044043672723cdf4f3725c500e77a54e07cd0a4759371c04c0cfa1-json.log
drwx------ 2 root root   4096 Nov  2 22:29 checkpoints
-rw------- 1 root root   4041 Nov  7 14:41 config.v2.json
-rw-r--r-- 1 root root   1705 Nov  7 14:41 hostconfig.json
-rw-r--r-- 1 root root     13 Nov  7 14:41 hostname
-rw-r--r-- 1 root root    174 Nov  7 14:41 hosts
drwx------ 2 root root   4096 Nov  2 22:29 mounts
-rw-r--r-- 1 root root    149 Nov  7 14:41 resolv.conf
-rw-r--r-- 1 root root     71 Nov  7 14:41 resolv.conf.hash
[root@iZ2zedqr9yeos47fg4uor5Z 6f5f3c1953044043672723cdf4f3725c500e77a54e07cd0a4759371c04c0cfa1]#

我们将要修改的文件就是config.v2.jsonhostconfig.json

4.关闭容器、关闭docker

systemctl stop docker

5.修改config.v2.json

说明:想要将容器中的/opt/shardingsphere-proxy/logs目录映射到宿主机的/atguigu/server/proxy-a/logs目录下。
config.v2.json文件中找到MountPoints,添加如下/opt/shardingsphere-proxy/logs的映射即可(这里如果前面还有内容的话,注意逗号)

{
    ......
	
	"MountPoints": {
		......,
		"/opt/shardingsphere-proxy/logs": {
			"Source": "/atguigu/server/proxy-a/logs",
			"Destination": "/opt/shardingsphere-proxy/logs",
			"RW": true,
			"Name": "",
			"Driver": "",
			"Type": "bind",
			"Propagation": "rprivate",
			"Spec": {
				"Type": "bind",
				"Source": "/atguigu/server/proxy-a/logs",
				"Target": "/opt/shardingsphere-proxy/logs"
			},
			"SkipMountpointCreation": false
		}
	},
	
	......
	
}

6.修改hostconfig.json

说明:Binds中添加内容"/atguigu/server/proxy-a/logs:/opt/shardingsphere-proxy/logs"

{
	"Binds": [
		......,
		"/atguigu/server/proxy-a/logs:/opt/shardingsphere-proxy/logs"
	],
	......
}

7.重启docker与容器

systemctl start docker
docker start 容器id

8.进行目录验证

目录成功映射 出来,查看日志就不用每次很麻烦的进入容器内部查看了

[root@iZ2zedqr9yeos47fg4uor5Z logs]# pwd
/atguigu/server/proxy-a/logs
[root@iZ2zedqr9yeos47fg4uor5Z logs]# ll
total 36
-rw-r--r-- 1 root root 36421 Nov  7 14:41 stdout.log
-rw-r--r-- 1 root root     0 Nov  7 14:41 xa_tx1.log
-rw-r--r-- 1 root root     0 Nov  7 14:41 xa_tx.lck
[root@iZ2zedqr9yeos47fg4uor5Z logs]#

3. 注意

  • config.v2.json和hostconfig.json文件修改之前,需要关闭docker与容器!如果先修改了这两个文件,再关闭docker,这两个文件中的内容会被重置掉,导致新增的目录映射失效 (自己在这里折腾了很久才发现的!)
  • config.v2.json和hostconfig.json文件vi命令打开后,并非格式化后的json,这里可以通过:%!python3 -m json.tool命令将其进行格式化,方便查看

总结

到此这篇关于docker如何对已经启动的容器添加目录映射(挂载目录)的文章就介绍到这了,更多相关docker容器添加目录映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker容器修改端口和目录映射的方法步骤

    docker容器修改端口和目录映射的方法步骤

    在使用Docker时,容器的端口映射是一个核心概念,它允许容器与宿主机以及外部网络进行通信,这篇文章主要介绍了docker容器修改端口和目录映射的方法步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • Docker上部署 nps 和 npc 实现内网穿透

    Docker上部署 nps 和 npc 实现内网穿透

    本文介绍了如何使用Docker部署nps和npc实现内网穿透。nps是一款高性能的内网穿透代理服务器,npc是nps的客户端,可以将内网服务映射到公网上。通过Docker的容器化技术,可以方便地部署和管理nps和npc,同时保证了应用的隔离性和安全性。
    2023-04-04
  • Docker镜像与容器的导入导出以及常用命令总结

    Docker镜像与容器的导入导出以及常用命令总结

    Docker是一个开源的容器引擎,基于go语言开发并遵循了apache2.0协议开源,下面这篇文章主要给大家介绍了关于Docker镜像与容器的导入导出以及常用命令总结的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Docker数据卷挂载方式

    Docker数据卷挂载方式

    文章介绍了Docker数据卷的作用和使用方法,包括数据卷的创建、查看、删除以及挂载,数据卷的主要优点是将数据与容器分离,解耦合,便于操作容器内的数据,保证数据安全,通过挂载数据卷,可以在宿主机上修改容器中的数据,并且可以方便地进行数据的复用和升级维护
    2024-12-12
  • Docker跨主机网络(manual)的实现

    Docker跨主机网络(manual)的实现

    这篇文章主要介绍了Docker跨主机网络(manual)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 镜像仓库 Harbor搭建和使用教程

    镜像仓库 Harbor搭建和使用教程

    本文给大家介绍镜像仓库 Harbor搭建和使用教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-01-01
  • 关于docker部署服务时ip无法访问服务正常的问题

    关于docker部署服务时ip无法访问服务正常的问题

    小编在使用docker部署应用的时候,无法使用IP地址访问,防火墙已经关闭,可以ping通,应用已经配置0.0.0.0,怎么回事?下面小编给大家介绍下docker部署服务,ip无法访问,服务正常的解决方法,感兴趣的朋友一起看看吧
    2022-09-09
  • docker安装openjdk并运行jar包的操作方法

    docker安装openjdk并运行jar包的操作方法

    这篇文章主要介绍了docker安装openjdk并运行jar包的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • linux上安装Docker(非常简单的安装方法)

    linux上安装Docker(非常简单的安装方法)

    今天小编就为大家分享一篇关于linux上安装Docker(非常简单的安装方法),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Docker-Compose搭建Spark集群的实现方法

    Docker-Compose搭建Spark集群的实现方法

    本文主要介绍了Docker-Compose搭建Spark集群的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论