进入docker容器
学习如何进入一个正在运行的容器的内部,要求学习者参照示例,进入一个名为container2的容器内部,并在容器内部创建一个1.txt文件。
相关知识
使容器在后台运行
因为本关要使用docker run -d命令,所以在本关的开始,将花费少量篇幅介绍这条命令。
有些时候,需要让容器在后台运行而不是直接把“启动命令”的结果输出在当前宿主机下。此时,可以通过添加-d参数来实现。
举个例子,假如不使用-d参数执行下面这条命令:
docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
那么会一直在控制台输出hello world,如下图所示:
docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"hello worldhello worldhello world...
但是如果使用了-d参数,此时容器会在后台运行并且不会将输出结果输出到控制台。如下图所示:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"ccd644424bffed71747e2a36977d70745cc211e7dac71006437ca52914c1b743
进入一个docker容器的几种方法
- 使用
ssh登陆进容器; - 使用
nsenter、nsinit等第三方工具; - 使用
docker本身提供的工具。
在这里我只介绍Docker本身提供的工具,大家如果对其他的两种方式感兴趣,可以阅读扩展链接中的内容。
Docker目前主要提供了docker exec和docker attach两个命令。
docker attach进入一个容器内部
1. docker attach containerId|containerName
如下图所示,首先使用docker run创建了一个容器,为其分配了伪终端,打开了它的标准输入流,并且让它在后台执行。
然后使用docker attach进入了该容器内部,实际上就是进入容器“启动命令”的终端。(containerId可以不用输全,只要能代表容器即可。例如下面的0539就是代表容器ID以0539开头的容器,一般情况下,前4位就能唯一标识一个容器了)
[root@localhost Desktop]# docker run -itd ubuntu /bin/bash0539852938cdb9538f67750d07ed8c7fa072de742d5c0c02128576f2d227ec46[root@localhost Desktop]# docker attach 0539root@0539852938cd:/#root@0539852938cd:/# lsbin dev home lib64 mnt proc run srv tmp varboot etc lib media opt root sbin sys usrroot@0539852938cd:/# exitexit[root@localhost Desktop]#
docker exec进入一个容器内部
2. docker exec [options] containerName|containerId command [arg]
如下图所示,首先使用docker run创建了一个容器,并使它在后台运行。
docker exec命令可以在一个运行的容器内部执行一条命令,例如下图中执行docker exec aec0 mkdir dir1后,就在容器中创建了一个dir1的文件夹。除此以外,还可以在容器中启动一个新的bash,例如下图执行了docker exec -it aec0 /bin/bash,在容器内部启动了一个新的bash终端,并使用-it为其分配一个伪终端绑定到标准输出上。
[root@localhost Desktop]# docker run -itd ubuntu /bin/bashaec040300549f95a8c4b37fecd3059122f08cb5422673640bd0bd9e641d0644c[root@localhost Desktop]# docker exec aec0 mkdir dir1[root@localhost Desktop]# docker exec -it aec0 /bin/bashroot@aec040300549:/# lsbin dev etc lib media opt root sbin sys usrboot dir1 home lib64 mnt proc run srv tmp varroot@aec040300549:/# exitexit[root@localhost Desktop]#
attach与exec的比较
使用docker run -d ubuntu "while true ; do sleep 1 ; echo hello; done"创建并在后台启动容器,每隔一秒打印一个hello。
[root@localhost Desktop]# docker run -d ubuntu /bin/sh -c "while true ; do sleep 1 ; echo hello; done"a695e721e324f11cc958867d13c9c6707018e359c747ba103554d4d8e9e7750f
使用docker attach 5719进入容器内部后,会在控制台每隔一秒打印了一个hello。
[root@localhost Desktop]# docker attach a695hellohello...
但是使用docker exec –it 5719 /bin/bash进入容器后,并没有打印“hello”,因为docker exec执行后,在容器中打开一个新的终端,该终端与“启动命令”的终端不是同一个。
[oot@localhost Desktop]# docker exec -it a695 /bin/bashroot@a695e721e324:/#
attach与exec的主要区别
attach直接进入容器“启动命令”的终端,不会启动新的进程;exec则是在容器中打开新的终端,并且可以启动新的进程;- 如果想直接在终端中查看容器“启动命令”的输出,用
attach;其他情况使用exec。#注意如果想在右侧使用命令行模拟操作,请先输入service docker start#否则将不能执行docker命令#基于ubuntu镜像创建并在后台启动一个名为container2的容器#拉取ubutun 最新镜像,实际生产中,docker pull ubutun可以省略,docker run的时候会自己去拉取。docker pull ubuntudocker run -itd --name container2 ubuntu /bin/bash#由于测试环境不允许从终端输入,所以请使用docker exec完成任务
#********** Begin *********#
docker exec container2 touch 1.txt
#********** End **********#
参考链接: 两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)_docker 多次进入容器-CSDN博客 Docker系列~exec与attach(四)-CSDN博客 扩展链接: Docker容器进入的4种方式 - 純黑色 - 博客园
相关文章:
进入docker容器
学习如何进入一个正在运行的容器的内部,要求学习者参照示例,进入一个名为container2的容器内部,并在容器内部创建一个1.txt文件。 相关知识 使容器在后台运行 因为本关要使用docker run -d命令,所以在本关的开始,将…...
C陷阱与缺陷——第5章库函数
1. 返回整数的getchar函数 #include <stdio.h>main() {char c;while((c getchar()) ! EOF){putchar(c);} } 上述函数是错误的,原因在于程序中的变量c被声明为char类型,而不是int类型,这意味着c无法容下所有可能的字符,特…...
【C++上层应用】6. 信号 / 中断
文章目录 【 1. signal 函数 】【 2. raise函数 】 信号是由操作系统传给进程的 中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 CtrlC 产生中断。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕…...
树与二叉树堆:堆的意义
目录 堆的意义: 第一是堆的排序,第二是堆的top k 排行问题 堆的 top k 排行问题: 面对大量数据的top k 问题: 堆排序的实现:——以升序为例 方法一 交换首尾: 建立大堆: 根结点尾结点的…...
什么时候适合做ui自动化测试?什么时候做接口自动化测试
UI自动化测试和接口自动化测试都是软件测试中非常重要的部分,它们各自有适合的应用场景。 适合做UI自动化测试的场景包括: 用户界面(UI)变化频繁的应用程序。需要测试用户交互和流程的应用程序。需要验证页面布局、样式和交互的…...
[ABC261E] Many Operations(dp,位运算,打表)
[ABC261E] Many Operations - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Problem Statement We have a variable X and N kinds of operations that change the value of X. Operation i is represented as a pair of integers (Ti,Ai), and is the following operati…...
一、爬虫-爬取豆瓣电影案例
1、环境配置 你需要一个pycharm和requests第三方库,在安装完成之后即可继续浏览。 2、操作流程 (1)打开豆瓣电影网站,点击排行榜,点击喜剧,检查 (2)可以看到鼠标每次下移࿰…...
4G5G防爆执法记录仪、防爆智能安全帽赋能智慧燃气,可视化巡检巡线,安全生产管控
随着燃气使用的普及,燃气安全问题日益突出。传统应急安全问题处理方式暴露出以下问题: 应急预案不完善:目前一些燃气企业的应急预案存在实用性不高、流程不清晰等问题,导致在紧急情况下难以迅速启动和有效执行。 部门协同不流畅…...
武汉数字孪生赋能工业制造,加速推进制造业数字化转型
随着数字孪生技术的不断推进,互联网、物联网、智能传感技术开始应用到数控机床的远程服务,状态监控,故障诊断,维护管理等方面。武汉数字孪生是在虚拟空间中创建物理对象的高保真虚拟模型,以模拟其在现实世界中的行为提…...
安卓密码框、EditText
目录 1. 基础使用 2. 密码的展示与隐藏 (1) 使用setTransformationMethod方法 (2) 使用setInputType方法 3. imeOptions属性 4. 单行设置 在安卓中使用密码框普遍采用EditText设置inputType"textPassword"的方式。 1. 基础使用 <EditTextandroid:id"…...
ROS命令行工具
1、roscore 在使用ROS之前,首先要启动roscore进程。当我们在终端中运行这个命令时,系统就会启动ROS Master、参数服务器和日志节点。在这之后,就可以运行任何其他的ROS程序/节点了。所以可以在一个终端窗口运行roscore指令&#…...
深入浅出 Golang 中的直接依赖和间接依赖管理
目录 引言 直接依赖 间接依赖 为什么需要间接依赖? 如何管理间接依赖? 小结 引言 Golang 中的依赖管理是使用 go mod 进行管理的。go mod 是 Golang 官方推出的依赖管理工具,可以帮助开发者管理项目的依赖关系,确保项目代码…...
深入Python元编程:了解声明与初始化定制元类
更多资料获取 📚 个人网站:ipengtao.com 简介 在Python中,元编程是指在运行时创建或定制类的编程。元类是Python中最强大的元编程工具之一,允许您控制类的创建过程。元类是类的类,它控制类的实例化,允许您…...
[传智杯初赛] 期末考试成绩
传智专修学院的 Java 程序设计课程的评价体系是这样的: 首先,所有学生会有一个卷面得分,这个得分一定是一个 [0,100][0,100] 之间的整数。 如果卷面得分在 9090 分及以上,那么他的 GPA(加权平均成绩) 就是…...
Linux 常用基本命令
文章目录 7.1 帮助命令7.1.1 man 获得帮助信息7.1.2 help 获得shell内置命令的帮助信息7.1.3 常用快捷键 7.2 文件目录类7.2.1 pwd 显示当前工作目录的绝对路径7.2.2 ls 列出目录的内容7.2.3 cd 切换目录7.2.4 mkdir 创建一个新的目录7.2.5 rmdir 删除一个空的目录7.2.6 touch …...
阿里云语雀频繁崩溃,有什么文档管理工具是比较稳定的?
10月23 日14:00左右,蚂蚁集团旗下的在线文档编辑与协同工具语雀发生服务器故障,在线文档和官网都无法打开。直到当天晚上22:24,语雀服务才全部恢复正常。从故障发生到完全恢复正常,语雀整个宕机时间将近 8 小时,如此长…...
二分查找(折半查找)探究学习
1.引入 当我们想要查找在一个数组中某一个特定的数它的下标是什么的时候,我们最先想的方法是遍历数组,如下: #include<stdio.h> #include<string.h> int main() { int arr[10]{1,2,3,4,5,6,7,8,9,10}; int key 8;//要找的数是8…...
Android : 异常记录
查询大数据时 报错 android.database.sqlite.SQLiteBlobTooBigException: Row too big to fit into CursorWindow requiredPos0, totalRows1解决办法:cursor DB.rawQuery("select * from " DBhelpUtil.TABLE_NAME" where id ?",new String[]…...
西南科技大学电路分析基础实验A1(元件伏安特性测试 )
目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 1、测定线性电阻的伏安特性 2、二极管伏安特性测试 3、测定实际电压源的伏安特性 四、实验数据及结果分析(预习写必要实验步骤和表格) 1、测定线性电阻的伏安特性 2、二极管伏安特性测…...
【Java】泛型的简单使用
文章目录 一、包装类1.基本数据类型和对应的包装类2.自动装箱和自动拆箱3.手动装箱和手动拆箱 二、什么是泛型三、泛型的使用四、裸类型(Raw Type)五、泛型是如何编译的六、泛型的上界七、泛型方法总结 一、包装类 在了解泛型之前我们先了解什么是包装类…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
