docker exec 与 docker attach 区别
来源:互联网 发布:网络分离器图片 编辑:程序博客网 时间:2024/06/10 19:23
Docker exec与Docker attach
不论是开发者是运维人员,都经常有需要进入容器的诉求。
目前看,主要的方法不外乎以下几种:
1. 使用ssh登陆进容器
2. 使用nsenter、nsinit等第三方工具
3. 使用Docker本身提供的工具
方法1需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导
的一个容器一个进程的原则。
方法2需要额外学习使用第三方工具。
所以大多数情况最好还是使用Docker原生方法,Docker目前主要提供了Docker exec和
Docker attach两个命令。
以下在docker1.1上及以上验证。
Docker attach
Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。
但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。
[root@localhost temp]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2327e7eab0ed busybox:buildroot-2014.02 "/bin/sh" About a minute ago Up About a minute bb2[root@localhost temp]# docker attach bb2/ # lsbin dev etc home lib lib64 linuxrc media mnt opt proc root run sbin sys tmp usr var/ # 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 $?0
docker exec执行后,会命令执行返回值。(备注Docker1.3似乎有Bug,不能正确返回命令执行结果)
[root@localhost temp]# docker exec -it bb cat /a.shecho "running a.sh"exit 10[root@localhost temp]# docker exec -t bb /a.shrunning a.sh[root@localhost temp]# echo $?10[root@localhost temp]# docker exec -it bb /a.shrunning a.sh[root@localhost temp]# echo $?10[root@localhost temp]# docker exec -i bb /a.shrunning a.sh[root@localhost temp]# echo $?10
关于-d参数
在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。
程序在后台运行。
[root@localhost temp]# docker exec -d bb2 /a.sh[root@localhost temp]# echo $?0
如果不使用-d参数,由于命令需要长时间执行,docker exec会卡住,一直等命令执行完成
才返回。
- docker exec 与 docker attach 区别
- Docker exec与Docker attach
- Docker系列~exec与attach(四)
- Docker attach
- docker exec 与容器日志
- Docker容器学习梳理--容器登陆方法梳理(attach、exec、nsenter)
- Docker学习笔记(五)之attach与logs命令
- Docker学习笔记(五)之attach与logs命令
- docker save与docker export的区别
- docker exec 运行命令
- Docker exec 命令
- docker之exec
- docker与vagrant的区别
- Docker与LXC的区别
- lxc与docker的区别
- Docker attach正确的退出方式
- Docker学习笔记 — Docker与LXC的区别
- Docker学习笔记 — Docker与LXC的区别
- 智能化变电站辅助系统与生产系统结合的未来发展方向
- Linux errno 错误对照表
- Android 中如何实现 显示和隐藏软键盘——附Demo下载
- UI控件笔记(十一):UI之UITableView\自定义UITableView\分组
- Socket编程
- docker exec 与 docker attach 区别
- Xcode 下载地址
- linux中 777,755等用户权限说明
- php 递归创建目录
- pixhawk win编译环境搭建
- HashSet及LinkedHashSet之源码分析
- 阿里云Centos配置iptables防火墙
- 详细解析Raid0、Raid0+1、Raid1、Raid5四者的区别
- 说说JSON和JSONP,也许你会豁然开朗