进入docker容器

学习如何进入一个正在运行的容器的内部,要求学习者参照示例,进入一个名为container2的容器内部,并在容器内部创建一个1.txt文件。

相关知识

使容器在后台运行

因为本关要使用docker run -d命令,所以在本关的开始,将花费少量篇幅介绍这条命令。

有些时候,需要让容器在后台运行而不是直接把“启动命令”的结果输出在当前宿主机下。此时,可以通过添加-d参数来实现。

举个例子,假如不使用-d参数执行下面这条命令:

  1. docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

那么会一直在控制台输出hello world,如下图所示:

  1. docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
  2. hello world
  3. hello world
  4. hello world
  5. ...

但是如果使用了-d参数,此时容器会在后台运行并且不会将输出结果输出到控制台。如下图所示:

  1. docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
  2. ccd644424bffed71747e2a36977d70745cc211e7dac71006437ca52914c1b743
进入一个docker容器的几种方法
  1. 使用ssh登陆进容器;
  2. 使用nsenter、nsinit等第三方工具;
  3. 使用docker本身提供的工具。

在这里我只介绍Docker本身提供的工具,大家如果对其他的两种方式感兴趣,可以阅读扩展链接中的内容。

Docker目前主要提供了docker execdocker attach两个命令。

docker attach进入一个容器内部

1. docker attach containerId|containerName

如下图所示,首先使用docker run创建了一个容器,为其分配了伪终端,打开了它的标准输入流,并且让它在后台执行。

然后使用docker attach进入了该容器内部,实际上就是进入容器“启动命令”的终端。(containerId可以不用输全,只要能代表容器即可。例如下面的0539就是代表容器ID0539开头的容器,一般情况下,前4位就能唯一标识一个容器了)

  1. [root@localhost Desktop]# docker run -itd ubuntu /bin/bash
  2. 0539852938cdb9538f67750d07ed8c7fa072de742d5c0c02128576f2d227ec46
  3. [root@localhost Desktop]# docker attach 0539
  4. root@0539852938cd:/#
  5. root@0539852938cd:/# ls
  6. bin dev home lib64 mnt proc run srv tmp var
  7. boot etc lib media opt root sbin sys usr
  8. root@0539852938cd:/# exit
  9. exit
  10. [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为其分配一个伪终端绑定到标准输出上。

  1. [root@localhost Desktop]# docker run -itd ubuntu /bin/bash
  2. aec040300549f95a8c4b37fecd3059122f08cb5422673640bd0bd9e641d0644c
  3. [root@localhost Desktop]# docker exec aec0 mkdir dir1
  4. [root@localhost Desktop]# docker exec -it aec0 /bin/bash
  5. root@aec040300549:/# ls
  6. bin dev etc lib media opt root sbin sys usr
  7. boot dir1 home lib64 mnt proc run srv tmp var
  8. root@aec040300549:/# exit
  9. exit
  10. [root@localhost Desktop]#
attach与exec的比较

使用docker run -d ubuntu "while true ; do sleep 1 ; echo hello; done"创建并在后台启动容器,每隔一秒打印一个hello

  1. [root@localhost Desktop]# docker run -d ubuntu /bin/sh -c "while true ; do sleep 1 ; echo hello; done"
  2. a695e721e324f11cc958867d13c9c6707018e359c747ba103554d4d8e9e7750f

使用docker attach 5719进入容器内部后,会在控制台每隔一秒打印了一个hello

  1. [root@localhost Desktop]# docker attach a695
  2. hello
  3. hello
  4. ...

但是使用docker exec –it 5719 /bin/bash进入容器后,并没有打印“hello”,因为docker exec执行后,在容器中打开一个新的终端,该终端与“启动命令”的终端不是同一个。

  1. [oot@localhost Desktop]# docker exec -it a695 /bin/bash
  2. root@a695e721e324:/#
attach与exec的主要区别
  1. attach直接进入容器“启动命令”的终端,不会启动新的进程;
  2. exec则是在容器中打开新的终端,并且可以启动新的进程;
  3. 如果想直接在终端中查看容器“启动命令”的输出,用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种方式 - 純黑色 - 博客园

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

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

相关文章

IDEA专栏—重装IDEA的配置

文章目录 1、maven路径2、默认文件路径3、插件4、导包顺序5、快捷键6、调整配置插件 1、maven路径 2、默认文件路径 3、插件 4、导包顺序 import static all other imports <blank line> import java.* import javax.* <blank line> import all other imports <…

python实现获取aws route53域名信息

最近由于工作原因接触到aws的服务&#xff0c;我需要实时获取所有的域名信息&#xff0c;用于对其进行扫描&#xff0c;因此写了一个自动化爬取脚本 给需要的人分享。 1.基础准备 代码环境&#xff1a;python3 第三方库&#xff1a;boto3 &#xff08;安装方法pip install…

虚幻学习笔记7—蓝图接口

一、前言 蓝图接口就是可以在蓝图中实现的接口&#xff0c;有它方便的地方&#xff0c;可以很方便的调用到实现了接口的函数。 二、实现 2.1、创建一个蓝图接口 1&#xff09;可以添加多个函数。 2&#xff09;函数在蓝图接口中只能规定输入和输出参数。 只有输入参数的可以…

SSM校园学习助手系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 校园学习助手系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

C语言--每日选择题--Day30

第一题 1. i 5&#xff0c;j 7&#xff0c;i | j 等于多少&#xff1f; A&#xff1a;1 B&#xff1a;3 C&#xff1a;5 D&#xff1a;7 答案及解析 D &#xff5c;这个是按位或运算符&#xff0c;两个数的二进制位&#xff0c;有1为1&#xff0c;同0为0&#xff1b; i的二进…

Android S分屏相关组件总结

在Android S中&#xff0c;分屏功能相关的组件&#xff1a; WindowState&#xff08;窗口状态&#xff09;&#xff1a;表示一个窗口的状态和属性&#xff0c;包括窗口的位置、大小、可见性等。它用于管理和操作应用程序的窗口。DisplayContent&#xff08;显示内容&#xff0…

ubuntu下训练自己的yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…

虚拟机VMware下CentOS7.9对磁盘扩容

首先是在VMware虚拟下对机器进行关机&#xff0c;然后扩容后启动机器&#xff08;操作简单&#xff0c;忽略&#xff0c;网上很多&#xff09; 开始增加磁盘空间 查看磁盘空间 发现此时磁盘空间仍然没变化 df -lh 查看当前磁盘分区信息 fdisk -l 对新加磁盘空间进行分区操…

CentOS配置本地源

我们有一台CentOS机器不能联网&#xff0c;为了安装软件&#xff0c;设置本地源&#xff1a; 1.建立目录。 mkdir /mnt/cdrom mkdir /mnt/iso 2.把相应版本的Everything的iso复制到机器上。然后copy到刚才iso目录。centos7的Everything有10G多&#xff0c;这个复制很费时间。…

UG\NX二次开发 创建对象属性UF_ATTR_assign

文章作者:里海 来源网站:里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 weixin_43890371 订阅本专栏,非常感谢。 简介 创建对象属性UF_ATTR_assign 这个函数在后续NX版本中被UF_ATTR_set_user_attribute替代,新的函数使用例子请参阅这篇文章《UG\NX二次开发 创建对象属性UF_…

java多线程 Exchanger数据交换测试代码

学习java多线程&#xff0c;请同时参阅 Java多线程 信号量和屏障实现控制并发线程数量&#xff0c;主线程等待所有线程执行完毕1 学习java多线程&#xff0c;请同时参阅&#xff1a;java多线程CountDownLatch简单测试 Exchanger用于进行两个线程之间的数据交换。它提供一个…

UG\NX二次开发 获取对象上属性的锁定状态UF_ATTR_ask_locked

文章作者&#xff1a;里海 来源网站&#xff1a;里海NX二次开发3000例专栏 感谢粉丝订阅 感谢 2301_80435318 开发 订阅本专栏&#xff0c;非常感谢。 简介 设置对象上属性的锁定状态UF_ATTR_set_locked&#xff0c;需要先在“用户默认设置”中勾选“通过NX Open锁定属性”&…

阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?

为什么通过CDN控制台&#xff08;或者OpenAPI&#xff09;的监控查询、用量查询&#xff08;实际计费流量&#xff09;功能查到的加速域名使用的流量数据与通过日志统计的流量数据有差异&#xff1f;&#xff08;通过日志统计的流量数据通常会比通过监控查询流量或者用量查询流…

shiro-cas处理请求的流程

1.shiro框架处理请求&#xff0c;首先会先经过AccessControlFilter的onPreHandle方法。 2.onPreHandle中 ①isAccessAllowed&#xff1a;判断用户是否登录 在登录的情况下会走此方法&#xff0c;此方法返回true直接访问控制器&#xff1b; ②onAccessDenied&#xff1a;是否是拒…

如何保证缓存和数据库的双写一致性?

一、什么是数据库和缓存双写一致性&#xff1f; 在分布式系统中&#xff0c;数据库和缓存会搭配一起使用&#xff0c;以此来保证程序的整体查询性能。也就说&#xff0c;分布式系统为了缓解数据库查询的压力&#xff0c;会将查出来的数据保存在缓存中&#xff0c;下次再查询时…

什么是UTM投影坐标系?​

UTM&#xff08;Universal Transverse Mercator Grid System&#xff0c;通用横墨卡托格网系统&#xff09;坐标是一种平面直角坐标。 这种坐标格网系统及其所依据的投影已经广泛用于地形图&#xff0c;作为卫星影像和自然资源数据库的参考格网以及要求精确定位的其他应用。 …

android framework分屏“官方”黑屏bug问题发现,你会分析吗?-千里马实战作业挑战

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家都知道马哥课程以实战为特色&#xff0c;这里的实战就是最贴近公司里面开发的实战项目。这些实战主要来自哪呢&#xff1f; 1、以前在公司的工作积累&#xff0c;自己在公司做过什么&#xff0c;这部分比较好毕竟都是搞过的 2…

webshell之API免杀

ScriptEngineManager命令执行免杀 ScriptEngineManager执行js代码 利用ScriptEngineManager可以执行js命令&#xff0c;但是由于一般情况下&#xff0c;即便能运行js代码也不一定能执行系统命令。因为一般情况下js执行系统命令主要是依靠两种方式&#xff0c;IE的ActiveX插件…

用纯 CSS 实现网格背景

是不是在日常开发中经常遇到实现网格的需求&#xff0c;网格通常对网页中展示的元素能起到很好的定位和对齐作用。 这里介绍如何只通过 CSS 来实现这个需求&#xff1f; 使用背景图 这里我们的背景图使用 SVG 来创建&#xff0c;首先&#xff0c;创建绘出一个正方形&#xff0c…

PC模糊搜索

双向绑定input输入框&#xff0c;监听值改变事件 <el-inputinput"input"v-model"queryParams.keyword"style"margin-bottom: 10px"type"text"prefix-icon"el-icon-search"size"small"placeholder"输入员工…