两种进入容器的方法
docker attach
通过 docker attach
可以 attach 到容器启动命令的终端,例如:
1 root@ubuntu:~# docker run -d ubuntu /bin/bash -c "while true ;do sleep 1;echo I_am_in_container;done" 2 d7534aebaf5488f112d9d7d3558fc04b18a9c2ae6a8a6ffd735f0923a7e0bdf5 3 root@ubuntu:~# 4 root@ubuntu:~# docker attach d7534aebaf5488f112d9d7d3558fc04b18a9c2ae6a8a6ffd735f0923a7e0bdf5 5 I_am_in_container 6 I_am_in_container 7 I_am_in_container 8 I_am_in_container
通过 “长ID” attach 到了容器的启动命令终端,看到的是echo
每隔一秒打印的信息。
!!!注:可通过 Ctrl+p 然后 Ctrl+q 组合键退出 attach 终端。N多资料都是这样讲的,实际操作中没有退出终端。
docker exec
通过 docker exec
进入相同的容器:
1 root@ubuntu:~# docker exec -it d7534aebaf54 bash 2 root@d7534aebaf54:/# 3 root@d7534aebaf54:/# ps -elf 4 F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 5 4 S root 1 0 0 80 0 - 4594 wait 08:41 ? 00:00:00 /bin/bash -c while true ;do sleep 1;echo I_am_in_container;done 6 4 S root 303 0 0 80 0 - 4627 wait 08:46 pts/0 00:00:00 bash 7 0 S root 319 1 0 80 0 - 0 ? 08:46 ? 00:00:00 [sleep] 8 0 R root 320 303 0 80 0 - 8600 - 08:46 pts/0 00:00:00 ps -elf 9 root@d7534aebaf54:/# 10 root@d7534aebaf54:/# exit 11 exit 12 root@ubuntu:~#
说明:
-it
以交互模式打开 pseudo-TTY,执行 bash,其结果就是打开了一个 bash 终端。- 进入到容器中,容器的 hostname 就是其 “短ID”。
- 可以像在普通 Linux 中一样执行命令。
ps -elf
显示了容器启动进程while
以及当前的bash
进程。 - 执行
exit
退出容器,回到 docker host。
docker exec -it <container> bash|sh
是执行 exec 最常用的方式。
attach VS exec
attach 与 exec 主要区别如下:
- attach 直接进入容器 启动命令 的终端,不会启动新的进程。
- exec 则是在容器中打开新的终端,并且可以启动新的进程。
- 如果想直接在终端中查看启动命令的输出,用 attach;其他情况使用 exec。
查看启动命令的输出,可以使用 docker logs
命令:
1 root@ubuntu:~# docker logs -f d7534aebaf54 2 I_am_in_container 3 I_am_in_container 4 I_am_in_container 5 I_am_in_container 6 I_am_in_container
-f
的作用与tail -f
类似,能够持续打印输出。
--------------------------引用来自--------------------------------
https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587641&idx=1&sn=ac54f44b34834dfd5ed0d0accaf705d1&chksm=8d3080a0ba4709b6d66e55e0b7154b402687298f75f7232306670daba3a9f4b7181b8bc35482&scene=21#wechat_redirect