大家好,欢迎再次光临,我是你们的朋友全栈君。
当我们使用-d参数启动容器时,容器会进入后台运行,用户无法直接看到容器内的信息或进行操作。
此时,若需要进入容器进行操作,有多种方法可供选择,包括使用Docker官方提供的attach或exec命令,以及第三方工具nsenter。 1、attach命令 attach命令是Docker内置的命令,命令格式如下: docker attach [–detach-keys[=[]]] [–no-stdin] [–sig-proxy[=true]] CONTAINER
该命令支持以下三个主要选项:
·–detach-keys[=[]]:设定退出attach模式的快捷键序列,默认为CTRL-p CTRL-q;
·–no-stdin=true|false:是否关闭标准输入,默认为保持打开;
·–sig-proxy=true|false:是否将收到的系统信号代理给应用进程,默认为true。
然而,attach命令有时使用起来并不方便。当多个窗口同时使用attach命令连接到同一个容器时,所有窗口都会同步显示。一旦某个窗口因命令阻塞,其他窗口也将无法执行操作。 2、exec命令 从Docker1.3.0版本开始,提供了更为便捷的exec命令,可在容器内直接执行任意命令。其基本格式为:
docker exec [-d|–detach] [–detach-keys[=[]]] [-i|–interactive] [–privileged] [-t|–tty] [-u|–user[=USER]] CONTAINER COMMAND [ARG…]。
其中较为重要的参数包括:
·-i,–interactive=true|false:打开标准输入以接受用户输入命令,默认为false;
·–privileged=true|false:是否以高权限执行命令,默认为false;
·-t,–tty=true|false:分配伪终端,默认为false;
·-u,–user=”“:指定执行命令的用户名或ID。
例如,要进入刚创建的容器并启动一个bash:
可以看到,一个bash终端已被打开,在不影响容器内其他应用的情况下,用户可以轻松与容器进行交互。通过指定-it参数来保持标准输入打开,并且分配一个伪终端。使用exec命令对容器执行操作是推荐的方式。
3、nsenter工具 在util-linux软件包版本2.23+中包含了nsenter工具。如果系统中的util-linux包没有此命令,可以按照以下方法从源码安装:
代码语言:javascript代码运行次数:0运行复制“`javascript$ cd /tmp; curl https://www.php.cn/link/0958560bd45062d115debadb6bca3183 | tar -zxf-; cd util-linux-2.24;$ ./configure –without-ncurses$ make nsenter && cp nsenter /usr/local/bin
要使用nsenter连接到容器,首先需要找到容器进程的PID,可以通过以下命令获取:代码语言:javascript代码运行次数:0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor">运行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd">复制javascript PID=$(docker inspect --format "{ { .State.Pid }}" )
有了这个PID,就可以连接到容器:
代码语言:javascript代码运行次数:0运行复制javascript$ nsenter --target $PID --mount --uts --ipc --net --pid
发布者:全栈程序员栈长,转载请注明出处:https://www.php.cn/link/3a8fcf2a8e88e290cf69a9b95726187a
以上就是docker容器的启动(docker容器启动时间)的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/34710.html
微信扫一扫
支付宝扫一扫