进入docker容器的方法多种,如下:
1. 使用ssh登陆进容器
2. 使用nsenter、nsinit等第三方工具
3. 使用Docker本身提供的工具
但是上面的方法存在一定的问题如下:
方法1需要在容器中启动sshd,存在开销和攻击面增大的问题。同时也违反了Docker所倡导的一个容器一个进程的原则。
方法2需要额外学习使用第三方工具。
所以大多数情况最好还是使用Docker原生方法,Docker目前主要提供了Docker exec和Docker attach两个命令。(个人强烈建议使用docker原生方法、可以帮助理解docker的容器本质和保证docker的安全)
attach 用法
$ sudo docker attach 665b4a1e17b6 #通过容器id
或者
$ sudo docker attach loving_heisenberg #通过容器名称
就是讲你当前terminal 的标准输入、输出、错误附加到制定的docker容器。
通俗来讲就是 当前终端里可以看到 ENTRYPOINT/CMD 进程的输出,你发送 CTRL-c 信号(输入exit;也是同理) 直接会终止docker 运行。
如果 ENTRYPOINT/CMD 没有标准输出,那么attach 上去了,什么也没有,就好像假死了。
所以维持容器运行情况退出的命令为ctrl + P + Q
exec 用法
$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #通过容器id
或者
$ sudo docker exec -i -t loving_heisenberg /bin/bash #通过容器名称
在docker 里面新开了一个bash 进程,在该终端可以通过命令和容器交互,类似于通过ssh和远程linux server 交互。
所以大多数情况,可以直接使用 docker exec 命令。
退出命令是ctrl + P + Q 也可以使用命令行“exit;”退出