进入docker容器

进入docker容器的三种方法

1、使用ssh登陆进容器;
2、使用nsenter、nsinit等第三方工具;
3、使用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/bash
0539852938cdb9538f67750d07ed8c7fa072de742d5c0c02128576f2d227ec46
[root@localhost Desktop]# docker attach 0539
root@0539852938cd:/# 
root@0539852938cd:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@0539852938cd:/# exit
exit
[root@localhost Desktop]#

docker exec进入一个容器内部

  1. 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/bash
aec040300549f95a8c4b37fecd3059122f08cb5422673640bd0bd9e641d0644c
[root@localhost Desktop]# docker exec aec0 mkdir dir1
[root@localhost Desktop]# docker exec -it aec0 /bin/bash
root@aec040300549:/# ls
bin   dev   etc   lib    media  opt   root  sbin  sys  usr
boot  dir1  home  lib64  mnt    proc  run   srv   tmp  var
root@aec040300549:/# exit
exit
[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 a695
hello
hello
...

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

[root@localhost Desktop]# docker exec -it a695 /bin/bash
root@a695e721e324:/#

attach与exec的主要区别

1、attach直接进入容器“启动命令”的终端,不会启动新的进程;
2、exec则是在容器中打开新的终端,并且可以启动新的进程;
3、如果想直接在终端中查看容器“启动命令”的输出,用attach;其他情况使用exec。

练习:进入一个名为container2的容器内部,并在容器内部创建一个1.txt文件。

#注意如果想在右侧使用命令行模拟操作,请先输入
#service docker start
#否则将不能执行docker命令

#基于ubuntu镜像创建并在后台启动一个名为container2的容器
#拉取ubutun 最新镜像,实际生产中,docker pull ubutun可以省略,docker run的时候会自己去拉取。
docker pull ubuntu
docker run -itd --name container2 ubuntu /bin/bash
#由于测试环境不允许从终端输入,所以请使用docker exec完成任务
#********** Begin *********#
docker exec container2 mkdir 1.txt
#********** End **********#
  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值