本文目录导航:
docker exec 和 docker attach的区别
Docker exec与Docker attach不论是开发者是运维人员,都经常有须要进入容器的诉求。
目前看,关键的方法不外乎以下几种: 1. 经常使用ssh登陆进容器 2. 经常使用nsenter、nsinit等第三方工具 3. 经常使用docker自身提供的工具方法1须要在容器中启动sshd,存在开支和攻打面增大的疑问。
同时也违犯了Docker所提倡 的一个容器一个进程的准则。
方法2须要额外学习经常使用第三方工具。
所以大少数状况最好还是经常使用Docker原生方法,Docker目前关键提供了Docker exec和 Docker attach两个命令。
以下在fedora21,docker1.7上验证。
Docker attachDocker attach可以attach到一个曾经运转的容器的stdin,而后启动命令执行的举措。
然而须要留意的是,假设从这个stdin中exit,会造成容器的中止。
[root@localhost temp]# docker psConTAINER IDIMAGE COMMAND CREATEDSTATUSPORTS NAMES2327e7eab0edbusybox:buildroot-2014.02 /bin/sh about a minute ago Up about a minute bb2[root@localhost temp]# docker attach bb2/ # lsbindevetchome liblib64linuxrcmediamntoptproc root runsbin systmpusrvar/ # pwd// #Docker exec对于-i、-t参数可以看出只用-i时,由于没有调配伪终端,看起来像pipe执行一样。
然而执行结果、命令 前往值都可以正确失掉。
[root@localhost temp]# docker exec -i bb2 /bin/shdateTue Jul 14 04:01:11 UTC 2015echo $?0dir/bin/sh: dir: not foundecho $?127经常使用-it时,则和咱们平时操作console界面相似。
而且也不会像attach形式由于分开,造成 整个容器分开。
这种形式可以代替ssh或许nsenter、nsinit形式,在容器内启动操作。
[root@localhost temp]# docker exec -it bb2 /bin/sh/ # pwd// # echo $?0/ # dir/bin/sh: dir: not found/ # echo $?127假设只经常使用-t参数,则可以看到一个console窗口,然而执行命令会发现由于没有取得stdin 的输入,不可看到命令执行状况。
[root@localhost temp]# docker exec -t bb2 /bin/sh/ # pwdhanging....[root@localhost temp]# docker exec -t bb2 pwd/[root@localhost temp]# echo $?0[root@localhost temp]# docker exec -t bb2 dir2015/07/14 04:03:57 docker-exec: failed to exec: exec: dir: executable file not found in $PATH[root@localhost temp]# echo $?0docker exec执行后,会命令执行前往值。
(备注Docker1.3仿佛有Bug,不能正确前往命令执行结果)[root@localhost temp]# docker exec -it bb cat / running 10[root@localhost temp]# docker exec -t bb / [root@localhost temp]# echo $?10[root@localhost temp]# docker exec -it bb / [root@localhost temp]# echo $?10[root@localhost temp]# docker exec -i bb / [root@localhost temp]# echo $?10对于-d参数在后盾执行一个进程。
可以看出,假设一个命令须要长期间进程,经常使用-d参数会很快前往。
程序在后盾运转。
[root@localhost temp]# docker exec -d bb2 /[root@localhost temp]# echo $?0假设不经常使用-d参数,由于命令须要长期间执行,docker exec会卡住,不时等命令执行成功 才前往。
[root@localhost temp]# docker execbb2 /^C[root@localhost temp]#[root@localhost temp]#[root@localhost temp]# docker exec -itbb2 /^C[root@localhost temp]#[root@localhost temp]# docker exec -ibb2 /^C[root@localhost temp]# docker exec -tbb2 /^C[root@localhost temp]#
docker进入容器命令
该操作需经常使用Docker的exec命令。该命令的语法为“dockerexec-it
Docker从入门到知晓:Docker exec 命令学习
深化了解Docker:探求docker exec命令的全方位运行
在曾经把握了基础的Docker容器治理和docker run命令后,咱们将深化钻研一个关键的工具——docker exec。
它准许咱们间接在运转中的Docker容器外部操作,极大地裁减了容器的治理才干。
本文将具体引见docker exec命令的用法,包含基本语法、选项以及实战示例,让你更好地把握这一适用工具。
docker exec命令的外围作用是在容器运转时执行命令,无论是交互式shell,还是后盾义务,都可经过它成功。
但需留意,容器必定处于运转形态,非运转形态的容器不可执行docker exec。
命令的基本语法是:docker exec [选项] ConTAINER COMMAND [ARG...],比如,-it选项用于启动交互式bash shell,-d则用于以后台形式运本义务。
例如,经过`docker exec -it my_container /bin/bash`,咱们可以实时检查容器外部的文件,执行脚本。
权限治理上,docker exec自动经常使用容器内root权限,但可经过--user选项指定其余用户权限。
总结来说,docker exec是Docker工具箱中的关键一员,经过灵敏运用,咱们可以高效地与运转中的容器交互,执行各种义务。
把握这一命令,将有助于优化你的Docker经常使用水平。
赶快入手通常,解锁更多或许吧!
若想了解更多软件测试技术资料和面试阅历,这里有一系列资源供你参考:
经过继续学习和通常,你的职业开展将愈加宽广。如今就执行起来,探求人工智能与测试开发的融合新畛域!