docker文件挂载和宿主主机文件的关系

一、背景


  在排查docker日志时发现在读取docker的文件时找不到文件,在宿主主机上可以查到对应的文件。这里就要理解docker文件目录和宿主主机上的文件的关系。

二、Docker文件系统和宿主系统

Docker文件和宿主文件之间的关系主要体现在Docker容器的运行环境中。Docker是一种开源的容器化平台,通过容器技术,可以实现快速部署和扩展应用程序。以下是Docker文件和宿主文件之间关系的详细说明:

一、文件系统隔离

  • 容器文件系统:每个Docker容器都有自己独立的文件系统,这个文件系统是容器化的,与宿主机的文件系统相互隔离。容器内的文件系统通常是从Docker镜像中加载的,镜像包含了运行应用程序所需的所有文件和依赖项。
  • 宿主机文件系统:宿主机的文件系统是Docker容器运行的基础,容器共享宿主机的内核,但容器内的文件系统是独立的,不会直接访问或修改宿主机的文件系统(除非通过特定的方式,如数据卷或绑定挂载)。

二、文件访问与共享

  • 数据卷(Volume):Docker提供了一种持久化存储机制,即数据卷。数据卷可以在容器之间共享和重用,也可以被挂载到宿主机的目录中,从而实现数据的持久化和共享。通过数据卷,容器可以访问和修改宿主机上的文件,但这些修改是独立于容器文件系统的。
  • 绑定挂载(Bind Mount):绑定挂载是将宿主机文件系统上的目录或文件直接挂载到容器中。这种方式允许容器直接访问和修改宿主机上的文件,而无需通过数据卷进行中转。绑定挂载在开发和测试环境中非常有用,因为它可以方便地访问和调试宿主机上的文件。

三、文件传输

  • docker cp命令:Docker提供了docker cp命令,用于在宿主机和容器之间传输文件。通过该命令,用户可以将文件从宿主机复制到容器内部,或将文件从容器内部复制到宿主机上。这对于备份、迁移或调试容器内的文件非常有用。

四、安全性与隔离性

  • 安全性:由于容器与宿主机共享内核,因此容器的安全性与宿主机的安全性密切相关。如果容器被攻破,攻击者可能会利用宿主机的漏洞来进一步提升权限。因此,必须采取额外的安全措施来保障容器的安全。
  • 隔离性:Docker使用Linux内核特性(如cgroups和namespaces)来隔离容器,确保它们不会干扰宿主机或其他容器的运行。这种隔离性使得Docker容器成为一种轻量级的虚拟化技术,能够在同一宿主机上同时运行多个容器而不会相互干扰。

三、容器文件和宿主文件对应关系示例

docker run -d -v /etc/nginx/html/:/etc/nginx/html/

将宿主机上的 /etc/nginx/html/ 目录挂载到容器内的 /etc/nginx/html/ 目录。这里,你实际上是在告诉Docker:

  • 使用 -d 标志在后台运行容器。
  • 使用 -v /etc/nginx/html/:/etc/nginx/html/ 挂载宿主机上的 /etc/nginx/html/ 目录到容器内的 /etc/nginx/html/ 目录。注意,两个路径末尾的斜杠(/)是可选的,但它们的存在或缺失会影响Docker如何解释这些路径。在这个例子中,由于两个路径都包含了斜杠,Docker会将这些路径视为目录,并且会尝试挂载整个目录。
  • 最后,nginx 指定了要运行的Docker镜像名称。

这种挂载方式非常有用,因为它允许你直接在宿主机上修改Nginx的配置文件或网站内容,而无需进入容器内部。这些更改会立即反映在容器内,因为容器内的 /etc/nginx/html/ 目录实际上是指向宿主机上的 /etc/nginx/html/ 目录的。

请确保宿主机上的 /etc/nginx/html/ 目录存在,否则Docker可能会遇到挂载问题。如果目录不存在,你可以手动创建它,或者使用Dockerfile或启动脚本在容器启动时创建它(尽管在这个特定的情况下,由于你是在挂载宿主机目录,所以你应该在宿主机上创建它)。

另外,请注意,如果你是在Linux系统上运行Docker,并且你的宿主机目录 /etc/nginx/html/ 已经被其他Nginx实例或其他服务使用,那么你可能需要考虑使用不同的目录来避免潜在的冲突。通常,将网站内容存储在 /var/www/html 或其他非系统关键路径下是一个更好的选择。不过,这完全取决于你的具体需求和环境配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【目录】8051汇编与C语言系列教程

8051汇编与C语言系列教程 作者将狼才鲸创建日期2024-07-23 CSDN文章地址:【目录】8051汇编与C语言系列教程本Gitee仓库原始地址:才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 一、本教程目录 序号教程名称简述教程链接1点亮LCD灯通过IO…

【分布式锁】Redission实现分布式锁

接着上一节,我们遇到了超卖的问题,并通过Redis实现分布式锁,进行了解决。本节 我将换一种方式实现分布式锁。 前提: nginx、redis、nacos 模块1: provider-and-consumer 端口 8023 模块2 rabbitmq-consumer 端口 8021 …

成都云飞浩容文化传媒有限公司电商服务新领航者

在电商的海洋里,无数企业如同繁星般闪烁,但其中有一颗璀璨的明星——成都云飞浩容文化传媒有限公司,以其专业的电商服务和独特的创新理念,成为行业的佼佼者。今天,就让我们一起走进云飞浩容,探索这家公司的…

# Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型

Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型 一、redis 服务器配置–redis.conf 配置 1、服务器端设定 1)设置服务器以守护进程的方式运行: daemonize yes|no 2)绑定主机地址: bin…

【防火墙】防火墙NAT、智能选路综合实验

实验拓扑 实验要求 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9,多出口环境基于带宽比例进行选路…

自动驾驶AVM环视算法–更新超广角视图算法和exe测试demo

1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新:测试的exe程序,无需解压码就可以体验算法测试效果 百度网盘: 链接:https://pan.baidu.com/s/1ndDcJ6VwexZoLUyUXlwLwg 提取码:q1…

python-爬虫实例(1):获取京东商品评论

目录 前言 道路千万条,安全第一条 爬虫不谨慎,亲人两行泪 获取京东商品评论信息 一、实例示范 二、爬虫四步走 1.UA伪装 2.获取Url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 道路千万条,安全第一条 爬虫不谨慎,…

手机怎么恢复回收站清空的照片?2个技巧大公开(适用各类安卓机)

站在时间的边缘,凝视着那些即将消逝的回忆,心里的惆怅不断增加。我们到底该怎么恢复回收站删除的照片呢?请相信,这些回忆并未真正消失。 无论你是因为误操作还是其他原因导致回收站被清空,这篇文章都将为你提供有力的…

Centos7_Minimal安装Cannot find a valid baseurl for repo: base/7/x86_6

问题 运行yum报此问题 就是没网 解决方法 修改网络信息配置文件,打开配置文件,输入命令: vi /etc/sysconfig/network-scripts/ifcfg-网卡名字把ONBOOTno,改为ONBOOTyes 重启网卡 /etc/init.d/network restart 网路通了

慎用Float和Double进行浮点运算

背景 在之前的开发过程中, 遇到了一些小问题. 就是在某功能计算时, 按照当时的设想是需要保留两位小数并向下取整. 当时没有太好的思路, 于是请教了好朋友gpt同志. 而gpt给出3种思路: 使用String.format方法 double value 123.456789; String formattedString String.forma…

Redis从入门到超神-(五)Redis实现分布式锁原理

引言 什么是分布式锁? 分布式锁是分布式系统中用于控制多个进程或线程对共享资源的访问的一种机制。在分布式系统中,由于存在多个服务实例或节点,它们可能会同时尝试访问或修改同一份数据或资源。如果没有适当的同步机制,就可能导…

labview实现两台电脑共享变量传输及同步

因为工作需要,需要实现多台主机间进行数据传输, 有两个备选方案, 1:建立tcp,然后自己解包 2:就是通过共享变量传输 虽然共享变量也是建立在TCP/IP上面的,但是不用自己解包呀 关于共享变量网络上…

mysql面试(四)

前言 本章节有些长,主要的篇幅是介绍缓存页的算法,如何快速的定位哪些是没有用过的,哪些是用过的,哪些是要淘汰掉的。 建议可以阅读一下这里面LRU算法相关的内容,和很多组件里面基本原理都是想通的,比如re…

聊聊 C# 中的顶级语句

前言 在 C# 9.0 版本之前,即使只编写一行输出 “Hello world” 的 C# 代码,也需要创建一个 C# 类,并且需要为这个 C# 类添加 Main 方法,才能在 Main 方法中编写代码。从 C# 9.0 开始,C# 增加了 “顶级语句” 语法&…

redis原理之底层数据结构-跳表

1.什么是跳表 1.1 链表及其不足 链表是在程序设计中最常见的数据结构之一,它通过指针将多个链表节点连接起来,这样就可以将逻辑上同一类的数据存储到不连续的内存空间上。链表结构如下: 但是链表有一个问题,就是当链表需要查询一…

3.1 FreeRTOS详细移植步骤(自己的实操)

[TOC](3.1 FreeRTOS详细移植步骤(自己的实操)) 自己使用阿波罗F767的内存管理实验和定时器实验,进行复刻。 FreeRTOS源码版本是FreeRTOS 202212.01。官网和Github都有下载。 按照STM32F767FreeRTOS开发手册V1.1进行移植复刻。 注:这个开发手册不是开发指南。跟视频里…

关于Qt部署CMake导致“Failed to set working directory to”的问题

2024年7月23日补充:该目录过深的情况只在Win10上有发现,Win11则没有问题,且Win11可以在DevHome中设置LongPath。 --------------------------------------------------------------------------------------------------------------- 使用qt…

Spark_Oracle_II_Spark高效处理Oracle时间数据:通过JDBC桥接大数据与数据库的分析之旅

接前文背景, 当需要从关系型数据库(如Oracle)中读取数据时,Spark提供了JDBC连接功能,允许我们轻松地将数据从Oracle等数据库导入到Spark DataFrame中。然而,在处理时间字段时,可能会遇到一些挑战…

分布式Apollo配置中心搭建实战

文章目录 环境要求第一步、软件下载第二步、创建数据库参考文档 最近新项目启动,采用Apollo作为分布式的配置中心,在本地搭建huanj 实现原理图如下所示。 环境要求 Java版本要求:JDK1.8 MySql版本要求:5.6.5 Apollo版本要求&…

第八讲:Sysmac Studio控制器设置

控制器设置 一、控制器设定-操作设置 1、启动模式(运行模式/编程模式) 控制器上电后,希望程序运行还是不运行。如果说希望程序运行,那么就选择运行模式。如果说希望上电后程序不运行就选择编程模式。 通常情况下选运行模式可能会比较多一些。 2、SD内存卡设置 当控制…