dockervolume文件权限(docker volumes 文件映射方式)
类别:服务器 浏览量:2930
时间:2021-10-20 08:20:09 dockervolume文件权限
docker volumes 文件映射方式背景在做区块链日志模块时,如果容器运行,需要把日志文件映射到宿主机上以方便查看。下面介绍一下我的实现方式。
实现通过docker-compose配置文件volumes参数
配置文件示例:
volumes: - /var/run/:/host/var/run/ - ./channel-artifacts:/var/hyperledger/configs - ./fabric_logs:/tmp/fabric_logs/
把容器中/tmp/fabric_logs目录映射到宿主机当前目录下的./fabric_logs目录下。这两个目录会共享数据。
创建容器时,代码中配置相关参数代码中创建容器时添加:
func (vm *DockerVM) createContainer(ctxt context.Context, client dockerClient, imageID string, containerID string, args []string, env []string, attachStdout bool) error { volumes := make(map[string]struct{}) var mounts []docker.Mount var source string var destination string var fabricCfgPath = os.Getenv("FABRIC_CFG_PATH") var configName string _, err := os.Stat(fabricCfgPath) if err == nil { configName = strings.ToLower(Peer_Prefix) config := viper.New() config.SetConfigName(configName) config.AddConfigPath(fabricCfgPath) config.ReadInConfig() config.SetEnvPrefix("CORE") config.AutomaticEnv() replacer := strings.NewReplacer(".", "_") config.SetEnvKeyReplacer(replacer) config.SetConfigType("yaml") destination = config.GetString("logging.logpath") //fmt.Println(destination) } if destination == "" { destination = "/tmp/fabric_logs/" } source = "/tmp/chaincode_logs/" + containerID volumes[destination] = struct{}{} mount := docker.Mount{ Name: "bind", Source: source, Destination: destination, Mode: "rw", RW: true, Driver: "rprivate", } mounts = append(mounts, mount) config := docker.Config{Cmd: args, Image: imageID, Env: env, Volumes: volumes, Mounts: mounts, AttachStdout: attachStdout, AttachStderr: attachStdout} hostConfig := getDockerHostConfig() hostConfig.Binds = []string{ source + ":" + destination + ":rw", } copts := docker.CreateContainerOptions{Name: containerID, Config: &config, HostConfig: hostConfig} dockerLogger.Debugf("Create container: %s", containerID) _, err = client.CreateContainer(copts) if err != nil { return err } dockerLogger.Debugf("Created container: %s", imageID) return nil }
其中volumes,Mounts, Hostconfig.Binds参数需要按照自己的映射关系去填写。
这样和通过:
1、docker-compose 配置文件启动
2、或者docker -v 参数命令行启动
达到一样效果。
补充:docker文件夹映射的两种方式---主机卷映射和共享文件夹映射
docker容器不保持任何数据
重要数据请使用外部卷存储(数据持久化)
容器可以挂载真实机目录或共享存储为卷
主机卷的映射[root@docker1 ~]# mkdir /var/data [root@docker1 ~]# docker run -it -v /var/data:/abc myos [root@f1fb58b85671 /]# cd /abc/ [root@f1fb58b85671 abc]# touch f1 [root@f1fb58b85671 abc]# ls f1 zhy [root@docker1 ~]# cd /var/data/ [root@docker1 data]# ls f1 [root@docker1 data]# touch zhy
思路:
将一台主机做为nfs主机, 创建相应的文件夹,并将其共享给docker的两台主机,两台docker主机将分享的文件夹映射到容器中,使得对应的容器可以共享到nfs主机的内容。可以将http等服务器的相应的页面文件夹使用这种形式,从而实现多个容器跑一个业务。
nfs主机配置【192.168.6.77】
[root@nfs ~]# yum -y install nfs-utils [root@nfs ~]# vim /etc/exports /public *(rw) [root@nfs ~]# systemctl restart nfs-server Failed to restart nfs-serve.service: Unit not found [root@nfs ~]# mkdir /public [root@nfs ~]# cd /public/ [root@nfs public]# touch nfs.txt [root@nfs public]# ls nfs.txt
docker1主机配置
[root@docker1 ~]# vim /etc/fstab 192.168.6.77:/public /mnt/nfs nfs defaults,_netdev 0 0 [root@docker1 ~]# mkdir /mnt/nfs [root@docker1 ~]# systemctl restart nfs-server [root@docker1 ~]# mount -a [root@docker1 ~]# df -h 192.168.6.77:/public 17G 3.2G 14G 19% /mnt/nfs [root@docker1 ~]# docker run -it -v /mnt/nfs/:/zhuhaiyan 192.168.6.153:5000/myos [root@c7c376e3755a /]# cd /zhuhaiyan [root@c7c376e3755a zhuhaiyan]# ls nfs.txt
docker2主机配置
[root@docker2 ~]# vim /etc/fstab 192.168.6.77:/public /mnt/nfs nfs defaults,_netdev 0 0 [root@docker2 ~]# mkdir /mnt/nfs [root@docker2 ~]# systemctl restart nfs-server [root@docker2 ~]# mount -a [root@docker2 ~]# df -h 192.168.6.77:/public 17G 3.2G 14G 19% /mnt/nfs [root@docker2 ~]# docker run -it -v /mnt/nfs/:/zhuhaiyan 192.168.6.153:5000/myos [root@cdd805771d07 /]# cd /zhuhaiyan/ [root@cdd805771d07 zhuhaiyan]# ls nfs.txt
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
您可能感兴趣
- docker 重置容器的映射端口(运行中的docker容器端口映射如何修改详解)
- 如何使用docker启动tomcat(简述Docker安装Tomcat镜像并部署web项目)
- docker的安装部署(Docker快速安装Zookeeper的详细教程)
- docker容器编排入门教程(简简单单使用Docker部署Confluence)
- docker管理工具选择(Docker可视化管理工具DockerUI的使用)
- docker虚拟化容器使用教程(Docker安装ClickHouse并初始化数据测试)
- docker打包配置好的镜像(docker镜像的导入和导出的实现)
- springboot与docker(详解SpringBoot项目docker环境运行时无限重启问题)
- docker容器镜像内容(Docker容器从镜像恢复代码的操作步骤)
- docker1.12.5容器假死(解决docker run后容器出现Exited 0情况的问题)
- mongodb容器化部署映射端口访问(Docker 部署 MongoDB容器的方法)
- docker 环境下udp双向通信怎么办(解决Docker network Create加--subnet后遇到问题)
- docker镜像怎么用(Docker和镜像的操作方法)
- docker显示出错应用图标怎么处理(docker 命令报异常permission denied的解决方案)
- windows 10家庭版上安装docker(win10家庭版安装Docker的方法步骤)
- docker容器启动执行脚本(在docker容器中使用非root用户执行脚本操作)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
热门推荐
- 使用javascript数组循环(JavaScript数组reduce方法的语法与实例解析)
- mysql分区表的优缺点(MySQL数据表分区策略及优缺点分析)
- SQL Server获取时间段内的所有月份
- js实时获取页面宽度(JavaScript获取网页的宽高及如何兼容详解)
- mysql常用四种日志(MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结)
- python中查看数据类型的内置函数(python学习——内置函数、数据结构、标准库的技巧推荐)
- 宝塔面板腾讯云服务器安装流程(腾讯云服务器安装宝塔面板图文教程)
- sql server性能调优(SQL Server性能调优之缓存)
- docker部署redis集群查看版本(docker下的 redis 之持久化存储详解)
- 云服务器有必要买吗(云服务器好用吗?云服务器值得买吗?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9