nsenter,docker进入容器之后如何退出呢
来源:整理 编辑:智能门户 2025-06-12 12:18:11
本文目录一览
1,docker进入容器之后如何退出呢
解决方法:1、安装Docker 借助apt-get命令。2、$ sudo apt-get install docker.io 为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。Docker 容器操作退出后进入解决办法:1、nsenter 可以访问另一个进程的名字空间。nsenter 要正常工作需要有 root 权限。 很不幸,Ubuntu 14.4 仍然使用的是 util-linux 2.20。安装最新版本的 util-linux(2.24)版,请按照以下步骤:2、从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。
2,docker进入容器 之后怎么退出
ctrl+d 退出容器且关闭, docker ps 查看无ctrl+p+q 退出容器但不关闭, docker ps 查看有解决方法:1、安装Docker 借助apt-get命令。2、$ sudo apt-get install docker.io 为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。Docker 容器操作退出后进入解决办法:1、nsenter 可以访问另一个进程的名字空间。nsenter 要正常工作需要有 root 权限。 很不幸,Ubuntu 14.4 仍然使用的是 util-linux 2.20。安装最新版本的 util-linux(2.24)版,请按照以下步骤:2、从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。docker 退出容器 在怎么进入先用docker ps -a找到对应的已经停止了的容器id,然后用docker start -ia 启动容器安装Docker 借助apt-get命令,安装Docker是件轻而易举的事。 $ sudo apt-get install docker.io 为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。
3,如何登录到Docker的container中
使用Docker部署container后,我们总有类似的需求:登录到container中进行一些操作。常见的方式1.有ssh方式,特点是不需要特别的root权限,但是container需要安装sshd2.使用nsenter来从container获得一个shell实现登录3.使用nsinit本文主要介绍nsenter的使用nsenter使用非常方便,但是有的操作系统发行版本util-linux包比较老,所以没有包含这个nsenter,那么你需要自己编译和安装,对于hacker们来说,源码编译安装不是小case嘛,走起!注明: 下面的命令运行以Ubuntu 14.04为例1)下载源码git clone git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git util-linuxcd util-linux/2)安装依赖包(这个具体缺少的情况,会在运行./autogen.sh的提示,你也可以直接运行3),根据提示来安装对应的依赖包sudo apt-get install libtoolsudo apt-get install automakesudo apt-get install autopointsudo apt-get install libncurses5-dev3)编译安装./autogen.sh ./configure & make4)测试安装成功./nsenter -V5) 将nsenter加入系统环境可执行路径中sudo cp ./nsenter /usr/bin如何使用nsenter,非常简单,1) 首先找到container对应的进程IDsudo docker inspect --format "2) 执行nsenter获得一个shell ,假设1)获得id是4308sudo nsenter --target 4308 --mount --uts --ipc --net --pid理解很简单:docker run:启动containerubuntu:你想要启动的image-t:进入终端-i:获得一个交互式的连接,通过获取container的输入/bin/bash:在container中启动一个bash shell这样就进入container的内部了:root@af8bae53bdd3:/#如果有运行中的container,可以在container所在的外部操作系统中运行:docker ps查看到这个container。如果想看到所有的container,包括运行中的,以及未运行的或者说是沉睡镜像,则运行:docker ps -a如果要退出就:ctrl-d或:root@af8bae53bdd3:/# exit如果想再次打开这个container,运行:docker start goofy_almeida其中“goofy_almeida”是镜像的名称这个时候container运行在后台,如果想进入它的终端,则:docker attach goofy_almeida就可以了。
4,电脑中的NTLDR是什么
NTLDR全称是NT Loader,是系统加载程序
NTLDR文件是win nt/win200/WinXP的引导文件,当此文件丢失时启动系统会提示"NTLDR is missing..."并要求按任意键重新启动,不能正确进入系统 。所以应该在系统正常的时候给予备份。
NTLDR文件是做什么的?我们如何来修复NTLDR文件类型的故障呢?
NTLDR文件的是一个隐藏的,只读的系统文件,位置在系统盘的根目录,用来装载操作系统。
一般情况系统的引导过程是这样的: 代码
1、电源自检程序开始运行
2、主引导记录被装入内存,并且程序开始执行
3、活动分区的引导扇区被装入内存
4、NTLDR从引导扇区被装入并初始化
5、将处理器的实模式改为32位平滑内存模式
6、NTLDR开始运行适当的小文件系统驱动程序。
小文件系统驱动程序是建立在NTLDR内部的,它能读FAT或NTFS。
7、NTLDR读boot.ini文件
8、NTLDR装载所选操作系统 *如果NT/XP被选择,,
NTLDR运行Ntdetect.com 对于其他的操作系统,
NTLDR装载并运行Bootsect.dos然后向它传递控制。
windows NT过程结束。
9.Ntdetect.com 搜索计算机硬件并将列表传送给NTLDR,以便将这些信息写进HKE Y_LOCAL_MACHINEHARDWARE中。
10.然后NTLDR装载Ntoskrnl.exe,Hal.dll和系统信息集合。
11.Ntldr搜索系统信息集合,并装载设备驱动配置以便设备在启动时开始工作
12.Ntldr把控制权交给Ntoskrnl.exe,这时,启动程序结束,装载阶段开始
WindowsXP出现此故障的解决办法
当此文件丢失时,我们可以从安装光盘上进行提取,方法是:
1、进入系统故障恢复控制台。
2、转到C盘。
3、输入"copy X:\I386\NTLDR c:\"(说明:X为光驱盘符)并回车,如果系统提示要否覆盖则按下"Y",之后输入exit命令退出控制台重新启动即可。
今天刚遇到的一种情况:使用新硬盘安装系统时,在进行格式化未完成时突然重启,再启动时就出现NTLDR IS MISSING这个提示,换了一个新的硬盘后才没有这个提示。
Windows 2003 server出现此故障的解决办法
1. 用Windows 2003的安装盘启动电脑,进入Windows 2003 Server的安装界面;
2. 界面提示“要修复Windows 2003 server的安装,请按R”,按R键继续;3. 屏幕出现故障恢复控制台提示“C:\Winnt,要登录到哪个Windows 2003安装(要取消,请按Enter)?”,在此键入“1”,然后按Enter键;
4. 键入管理员密码,然后按Enter键;
5. 键入Copy H:\WIN2003\ENT\I386\Ntldr c:\,按ENTER键(注:我使 用的光盘是Windows 2003二合一光盘,如果是其他的安装盘,可以使用搜索命令查找一下ntldr文件的位置,一般在i386目录下。“h:”为 我的光盘驱动器号),如果系统提示您是否覆盖文件,键入Y,然后按Enter键。
最近一段时间我出现了这种情况,每次开机,都出现NTLDR is missing,press any key to restart,后面还有一句忘了,出现这种情况后,我重启开机按F10进入选择启动项,选择硬盘启动,year进如了,呵呵,如过你出现这种情况,也可以试试这种方法。NTLDR全称是NT Loader,是系统加载程序
NTLDR文件是win nt/win200/WinXP的引导文件,当此文件丢失时启动系统会提示"NTLDR is missing..."并要求按任意键重新启动,不能正确进入系统 。所以应该在系统正常的时候给予备份。
5,如何正确安装nsenter
如果想通过ssh进入container,需要需要安装nsenter,安装步骤如下:wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gztar -zxf-cd util-linux-2.24./configure –without-ncursesmakecp nsenter /usr/local/bin/这个地方有个坑,之前我写的是make && make install,经阿里云的技术团队测试,make之后千万不能make install,make install后会替代操作系统底层的一些东西,直接影响linux操作系统的启动,在阿里云上会导致ubuntu14.0.4不能启动,其实只需要把nsenter 复制到/usr/local/bin目录下即可。国内其他文档介绍安装nsenter的时候都没说明这些,在此特别写篇博客记录一下。找到mysql容器的第一个进程的PIDPID=`docker inspect --format "然后渗入(需要root权限)sudo nsenter --target $PID --mount --uts --ipc --net --pid使用nsenter进入docker容器docker容器运行后,如何进入容器进行操作呢?起初我是用ssh。如果只启动一个容器,用ssh还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置ssh server的,安装配置sshd,映射容器ssh端口,实在是麻烦。我发现很多docker镜像都是没有安装sshd服务的,难道有其他方法进入docker容器?浏览了docker的文档,我没有找到答案。还是要求助于无所不能的google,万能的google告诉我用nsenter吧。在大多数linux发行版中,util-linux包中含有nsenter.如果没有,你需要安装它.cd /tmpcurlhttps://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz\| tar -zxf-cd util-linux-2.24./configure --without-ncursesmake nsentercp nsenter /usr/local/bin使用shell脚本 docker-enter,将如下代码保存为docker-enter,chomod +x docker-enter#!/bin/shif [ -e $(dirname "$0")/nsenter]; then# with boot2docker, nsenter is not inthe path but it is in the same foldernsenter=$(dirname"$0")/nsenterelsensenter=nsenterfiif [ -z "$1" ]; thenecho "usage: `basename"$0"` container [command [arg]...]"echo ""echo "enters the docker containerand executes the specified command."echo "if command is not specified,runs an interactive shell in container."elsepid=$(docker inspect --format"if [ -z "$pid" ]; thenexit 1fishiftopts="--target $pid --mount --uts--ipc --net --pid --"if [ -z "$1" ]; then# no command given.# use su to clear all hostenvironment variables except for term,# initialize the environmentvariables home, shell, user, logname, path,# and start a login shell."$nsenter" $opts su -rootelse# use env to clear all hostenvironment variables."$nsenter" $opts env--ignore-environment -- "$@"fifi运行 docker-enter ,这样就进入到指定的容器中 关于nsenter更详细的使用方法见这里 https://github.com/jpetazzo/nsenter
6,如何进入 Docker 容器
从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。很不幸,Ubuntu 14.4仍然使用的是util-linux版本2.20。安装最新版本的util-linux(2.24)版,请按照以下步骤: 为了连接到容器,你还需要找到容器的第一个进程的PID。 docker inspect --format " 通过这个PID,你就可以连接到这个容器: nsenter --target $PID --mount --uts --ipc --net --pid nsinit 从0.9版本开始,Docker自身就具有一个管理容器的库,名字为 libcontainer。libcontainer中的nsinit工具允许用户直接访问linux名字空间和cgroup内核。在安装nsinit之前,你首先需要安装Go运行时环境: apt-get install git golang-go mkdir -p $HOME/go-dev/binmkdir -p $HOME/go-dev/src echo "export GOPATH=\$HOME/go-dev" >> ~/.profileecho "PATH=\$PATH:\$GOPATH/bin" >> ~/.profile source ~/.profile 接下来才安装nsinit: mkdir -p $GOPATH/src/github.com/dotcloudcd $GOPATH/src/github.com/dotcloud git clone https://github.com/dotcloud/docker.gitcd $GOPATH/src/github.com/dotcloud/docker /usr/bin/go get -v github.com/dotcloud/docker/vendor/src/github.com/docker/libcontainer/nsinit nsinit读取的是位于/var/lib/docer/execdriver/native/<container-id>容器目录下的配置数据。要运行nsinit,你需要切换到容器目录下。由于/var/lib/docker目录对于root用户是只读权限,因此你还需要root权限。通过docker的ps命令,你可以确定容器ID。一旦你进入/var/lib/docker目录,你就可以连接容器了: nsinit exec /bin/bash lxc(-attach) 直到Docker 0.8.1版本为止,LXC一直是管理容器的基本工具,Docker一直支持这个工具。但是从0.9.0版本开始,Docker默认使用libcontainer管理容器,不再依赖LXC了。因此默认情况下,你不能使用lxc-attach了。 如果你仍然希望使用lxc-attach,那么你需要使用-e lxc选项来重新启动Docker服务进程。使用这个选项,Docker的内部将再次使用LXC管理容器了。完成这个任务最简单的做法就是创建/etc/default/docker文件(如果这个文件仍然不存在),并添加以下内容: DOCKER_OPTS=" -e lxc" 现在你可以重新启动Docker服务了。要连接容器,你需要知道完整的容器ID: docker ps --no-trunc 接下来,你就可以连接这个容器了。要完成下面工作,你还需要root权限: lxc-attach -n <container-id> -- /bin/bash sshd 上面所有三种方法都要求具有主机系统的root权限。为了不采用root权限,通过ssh访问容器将是一个很好的选择。 要做到这一点,你需要构建一个支持SSH服务的基础映像。此时,我们可能遇到这样的问题:我们是不是用Docker CMD或者ENTRYPOINT运行一条命令就可以了?如果此时有sshd进程运行,那么我们就不要再运行其他进程了。接下来的工作是创建一个脚本或者使用像supervisord这样的进程管理工具来启动其它所有需要启动的进程。有关如何使用supervisord的 优秀的文档可以在Docker的web站点上找到。一旦你启动了具有sshd进程的容器,你就可以像以往一样通过ssh客户端了连接这个容器了。安装Docker 借助apt-get命令,安装Docker是件轻而易举的事。 $ sudo apt-get install docker.io 为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。 $ sudo usermod -a -G docker $USER 退出,然后重新登录,以激活群组成员的变化。 下一步,编辑Docker配置文件,以便更新Docker二进制代码的位置。 $ sudo vi /etc/default/docker.io DOCKER="/usr/bin/docker.io" 重启Docker服务。 $ sudo service docker.io restart 管理Docker容器 如果你想启动Ubuntu操作系统的一个新的Docker容器,首先需要获取Ubuntu Docker映像文件。下面这个命令会通过网络下载Docker映像文件。 $ docker pull ubuntu 你可以以一种交互模式来开启Ubuntu Docker,如下所示。最后一个参数“/bin/bash”是一旦启动就将在容器里面执行的命令,这里是一个简单的bash外壳命令。 $ docker run -i -t ubuntu /bin/bash
文章TAG:
进入 容器 之后 如何 nsenter
大家都在看
-
通用技术是什么,高中通用技术是什么课程?
2024-01-11
-
柔宇科技
2024-01-19
-
钢筋自动化设备招聘网南京,南京钢铁工人招聘
2024-02-07
-
长兴县自动化公司招聘,深圳自动化公司招聘
2024-05-11
-
河北正规自动化机械设备制造,机械设备制造及其自动化专业
2024-06-25
-
自动化种植水果机器设备,上海来贺自动化苹果分拣设备省人力
2024-08-02
-
性能模式,小米手机性能模式哪里切换
2024-08-23
-
小米显示器
2024-09-03
-
电压符号,电压的符号单位单位符号
2024-09-06
-
空调温控器,空调温控器的作用详细一点谢谢
2024-10-12
-
录制视频软件,电脑免费录制视频软件
2024-11-04
-
机器人的原动机主要由,未来的机器人有哪些看点?
2024-12-16
-
数据线哪里买划算,车险从哪里买比较划算
2024-01-03
-
附近哪里有自动化设备选择,做自动化设备哪里企业最多
2024-01-07
-
电气自动化技术好专升,电气自动化专业的技术好就业吗?
2024-04-01
相关文章推荐
- 自动化设备柔性振动盘,振动盘与传统送料设备之别
- 阳泉市自动化设备,什么是自动化焊接设备?
- 口红自动化加工设备,半自动加工设备
- 自动化控制有什么专业学,电气自动化专业什么?
- wlan,什么是WLAN
- 国内数据可视化公司,数据可视化工具哪些?推荐一下
- 各家地图的数据一样吗,地图数据有哪些?
- 自动化卤品生产设备有哪些,工业自动化设备哪些?
- 苏州光伏设备自动化有限公司,苏州晟成光伏设备有限公司应届生招聘
- 机器人是啥,什么是机器人?
- 硬盘有坏道数据,如何从坏硬盘读取数据?
- 自动化设备启停,启辰自动化设备
- 自动化专业去电厂做什么,电厂电气自动化是做什么的?
- 戴森 机器人 拆解360如何拆解儿童机器人巴迪?
- 自动化2021专业前景,女学生自动化专业前景