从docker container中调用宿主机命令行

devtools/2024/9/19 16:26:55/ 标签: docker, eureka, 容器

在Docker容器中直接调用宿主机的命令行工具并不是推荐的做法,因为Docker设计的初衷是实现应用程序的隔离和可移植性。然而,在某些开发或调试场景下,你可能需要临时访问宿主机的资源。为了满足这样的需求,可以通过几种间接方式来实现,而不是直接在容器内部执行宿主机命令。下面我将介绍几种安全且实用的方法,并提供示例代码,以帮助你理解如何在保持容器隔离性的同时,与宿主机进行交互。

方法1:使用​docker run​​的volume挂载

最常见的方式是通过挂载宿主机的目录或文件到Docker容器中,这样就可以在容器内访问宿主机上的文件或执行宿主机上的可执行文件。

示例:

假设你想在容器内运行宿主机的​​/usr/bin/mytool​​​命令,你可以先确保该命令对用户可执行,并通过挂载该工具到容器的某个路径,比如 ​​/usr/local/bin​​。

docker run -it --rm \-v /usr/bin/mytool:/usr/local/bin/mytool \your-image-name \bash -c "mytool arg1 arg2"

这段命令做了以下几件事:

  • ​-v /usr/bin/mytool:/usr/local/bin/mytool​​​ 挂载宿主机的 ​​mytool​​​ 到容器内的 ​​/usr/local/bin/mytool​​。
  • ​your-image-name​​ 是你要使用的Docker镜像名称。
  • ​bash -c "mytool arg1 arg2"​​​ 在容器启动后执行的命令,这里调用了刚刚挂载的 ​​mytool​​ 并传递了参数。
方法2:利用Docker Socket

如果你需要从容器内管理Docker宿主机(例如运行新的Docker容器或查询宿主机Docker状态),可以通过挂载Docker socket文件到容器中。

示例:

docker run -it --rm \-v /var/run/docker.sock:/var/run/docker.sock \docker-cli-image \docker ps

这里,​​/var/run/docker.sock​​​ 被挂载到了容器内,允许你在容器中使用 ​docker​ 命令来操作宿主机的Docker服务。注意,这样做存在安全风险,因为它提供了对宿主机Docker守护进程的完全访问权限,因此只应在受信任的环境或测试环境中使用。

方法3:使用网络端口映射和外部API

如果宿主机上运行有提供API的服务(如数据库、RESTful API等),可以直接通过网络访问这些服务,而不是直接调用宿主机的命令行工具。

示例:

如果你的宿主机运行了一个HTTP服务器,你可以在容器内通过其IP地址和开放的端口访问它。

import requestsresponse = requests.get('http://host_ip:port/path')
print(response.text)
总结

虽然直接从Docker容器中调用宿主机的命令行不是最佳实践,但通过上述方法,你可以在保持容器化应用隔离性的同时,灵活地与宿主机系统进行交互。记住,选择合适的方法时要考虑到安全性、隔离性和实际需求,避免不必要的安全隐患。在开发和调试阶段,这些技术可以提供便利,但在生产环境中应尽量减少此类交互,确保系统的稳定性和安全性。


http://www.ppmy.cn/devtools/19373.html

相关文章

DM8达梦数据库模式下,备份库中具体某一张表SQL操作

1、进行达梦数据库的安装路径,我的默认安装路径为 /home/dmdba/dmdbms/bin 2、执行表备份的命令dexp ./dexp MO_FORM_V5/"MO_FORM_V5"192.168.179.11:5236 DIRECTORY/opt/dm_back/ FILEsystem.dmp TABLES"MO_FORM_V5.FORM_WARN_RULE" LOGs…

sql server判断表是否存在,要是存在删除

在 SQL Server 中,你可以使用系统视图或者查询系统表来判断表是否存在,并且可以通过 DROP TABLE 语句来删除表。以下是对应的操作示例: 判断表是否存在 使用系统视图 sys.tables: IF EXISTS (SELECT * FROM sys.tables WHERE n…

Pytest基础

1.用例的设计原则 用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的 1、文件名以 test_.py 文件和test.py 2、以 test 开头的函数 3、以 Test 开头的类,不能包含__init__方法 4、以 test_ 开头的类里面的…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 4月27日,星期六

每天一分钟,知晓天下事! 2024年4月27日 星期六 农历三月十九 1、 教育部:深入实施学生欺凌防治专项行动,对所有中小学校开展起底式大排查。 2、 商务部等七部门联合印发《汽车以旧换新补贴实施细则》,购车最高补贴1万…

list类——常用函数模拟

本篇将对 list 类的常用函数进行模拟。其中主要要点为函数的模拟,另外还会对函数的功能和返回值进行讲解。但 list 可以说是 string vector stack queue …… STL 库中最难实现一个类,因为 list 的迭代器不是很好实现,所以本篇一个很重要的一…

​「Python大数据」LDA主题分析模型

前言 本文主要介绍通过python实现数据聚类、脚本开发、办公自动化。读取voc数据,聚类voc数据。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词LDA模型计算词汇和每个词的频率将可视化结果保存到HTML文件中二、具体产出 三、执行脚本 python ld…

微信小程序:11.本地生活小程序制作

开发工具: 微信开发者工具apifox进行创先Mock 项目初始化 新建小程序项目输入ID选择不使用云开发,js传统模版在project.private.config中setting配置项中配置checkinalidKey:false 梳理项目结构 因为该项目有三个tabbar所以我们要创建三…

Linux的学习之路:22、线程(2)

摘要 本章继续讲一下线程的东西 目录 摘要 一、抢票 二、加锁保护 三、死锁 1、死锁四个必要条件 2、避免死锁 四、同步 1、常见的线程安全的情况 2、常见不可重入的情况 3、常见可重入的情况 4、可重入与线程安全联系 5、可重入与线程安全区别 一、抢票 这里回…

机器学习学 - 监督学习 - 多项式回归与决策树回归

机器学习学习笔记 - 监督学习 - 多项式回归与决策树回归 一、多项式回归 多项式回归是线性回归的一种扩展,用于处理样本特征与样本值之间存在非线性关系的情况。当数据之间的关系并非简单的线性关系时,线性回归可能无法得到很好的拟合效果。此时&#…

SpringBoot统一功能处理

拦截器 拦截器快速入门 什么是拦截器? 拦截器是Spring框架提供的核心功能之一, 主要用来拦截用户的请求, 在指定方法前后, 根据业务需要执行预先设定的代码. 也就是说, 允许开发人员提前定义一些逻辑, 在用户的请求响应前执行. 也可以在用户请求前阻止其执行. 就比如我们要…

Esp8266 - USB开关分享(开源)

文章目录 简介推广自己gitee项目地址:嘉立创项目地址:联系我们 功能演示视频原理图嘉立创PCB开源地址原理图PCB预览 固件烧录代码编译烧录1. 软件和驱动安装2. 代码编译1. 安装所需要的依赖库文件2. 下载源代码3. 烧录代码 使用说明1. 设备配网2. 打开设备操作页面3…

基于springboot+vue的游艇停泊系统

一、系统架构 前端:vue2 | element-ui |html 后端:springboot | mybatis-plus 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. web端-登录 02. web端-系统首页1 03. web端-系统首页2 04. web端-泊位 05. web…

redolog、undolog和binlog日志文件详解

redolog、undolog和binlog日志文件详解 前言redolog设计目标记录内容写入策略 undolog设计目标记录内容写入策略 binlog设计目标记录内容写入策略 小结 前言 当谈论MySQL数据库的日志文件时,通常会涉及到三种主要类型:redo log(重做日志&…

STM32利用硬件I2C读取MPU6050陀螺仪数据

有了前面的基本配置,这节读取MPU6050的数据还算是简单,主要就是初始化时给MPU6050一些配置,取消睡眠模式,MPU6050开机是默认睡眠模式的,读写无效,所以上来就要先更改配置: MPU6050寄存器初始化…

在Centos系统源码安装postgreSQL数据库及postGIS扩展

安装前 PostGIS扩展通常需要安装一些依赖项。 1.GDAL: PostGIS需要GDAL(Geospatial Data Abstraction Library)来处理地理空间数据格式。 2.GEOS: GEOS(Geometry Engine - Open Source)是一个用于处理地理空间数据的C库。 3.Proj:…

jvm中的垃圾回收器

Jvm中的垃圾回收器 在jvm中,实现了多种垃圾收集器, 包括: 1.串行垃圾收集器 2.并行垃圾收集器 3.CMS(并发)垃圾收集器 4.G1垃圾收集器 1.串行垃圾回收器 效率低,使用较少 2.并行垃圾回收器 3.并发垃圾回…

【JavaScriptthreejs】对于二维平面内的路径进行扩张或缩放

目标 对指定路径 [{x,y,z},{x,y,z},{x,y,z},{x,y,z}.........]沿着边缘向内或向外扩张,达到放大或缩小一定范围的效果,这里我们获取每个点(这里是Vector3(x,y,z)),获取前后两个点和当前点的坐标,计算前后两点的向量&a…

机器学习(四)之无监督学习

前言: 前面写了监督学习的几种算法,下面就开始无监督啦! 如果文章有错误之处,小伙伴尽情在评论区指出来(嘿嘿),看到就会回复的。 1.聚类(Clustering) 1.1 概述&#xff…

mysql 字符串去重

把“aa,bb,cc,dd,aa,bb,cc,dd” 字符串中重复的内容去除。 还是用截取的方式,一个一个截取,然后进行拼接,拼接前用find_in_set函数来判断,是否已经存在? 如果不存在,进行拼接,存在就忽略&#x…

Elasticsearch 索引的分片和副本是什么意思,如何扩展分片

文章目录 前言Elasticsearch 索引的分片和副本是什么意思,如何扩展分片示例:1. 设置 5个分片,每个分片一个副本的命令2. 将5个分片扩展到10个分片 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊&…