《基于Kubernetes的容器云平台实战》——2.4 访问运行状态容器
2.4 访问运行状态容器
如果要直接改变运行状态容器的标准输入输出流,或者在其中执行程序,可以使用如下命令。
1.挂接运行状态容器标准流
docker container attach [OPTIONS] CONTAINER
将宿主机标准输入/标准输出流挂接到容器上,相当于切换到交互式运行。虽然支持多终端对同一容器挂接,但若某窗口阻塞时,其他窗口也无法操作。
--no-stdin不挂接容器的STDIN。--sig-proxy=false,不转发终端信号。比如在终端上输入Ctrl-C,只会退出attach状态,不会使容器运行终止。
2.在运行状态容器中执行命令
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
命令须在容器中可访问且只能为可执行程序或者shell,不能是shell命令串。
-d/--detach以后台方式执行,结果不回显;-i/--interactive以交互式执行命令,回显结果。-e/--env为命令设置环境变量。-t/--tty会分配伪终端。--privileged以特权方式执行命令。-u/--user以指定用户名或者UID执行命令,参数格式为<name|uid>[:<group|gid>]。-w/--workdir指定工作目录。
3. nsenter命令
只要进入Docker容器的命名空间中就可查看容器状态,在util-Linux软件包2.23以上版本中包含的nsenter工具就可以实现此功能。命令格式为:
nsenter [options] <program> [<argument>...]
若不进入mount命名空间,则待执行命令不必在容器文件视图中。
有-t/--target <pid>选项时,其他命名空间选项不必带有路径。-m/--mount;-u/--uts;-i/--ipc;-n/--net;-p/--pid;-U/--user选项指定要进入的命名空间。-Z/--follow-context使用目标进程SELinux上下文。
-F/--no-fork在执行命令之前不执行fork。-w/--wd和-r/--root指定工作目录和根目录。-S/--setuid和-G/--setgid分别为命令执行设定UID和GID。
获取容器进程ID可用如下命令:
docker container inspect -f="{{.State.Pid}}" <container>
- 点赞
- 收藏
- 关注作者
评论(0)