如何打开多个终端进入Docker容器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打开多个终端进入Docker容器?相关的知识,希望对你有一定的参考价值。
参考技术A打开多个终端进入Docker容器有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。
使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。
nsenter 可以访问另一个进程的名字空间。
为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。
PID=$(docker inspect _format “ .State.Pid ” <container>) //将<container>换成你的容器id
通过这个 PID,就可以连接到这个容器:
$ nsenter _target $PID _mount _uts _ipc _net _pid
更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo “[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker” >> ~/.bashrc; source ~/.bashrc
这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。
$ echo $(docker-pid <container>)
$ docker-enter <container>
附.bashrc_docker文件内容:
# Some useful commands to use docker.
# Author: yeasy@github
# Created:2014-09-25
alias docker-pid=”sudo docker inspect _format ‘.State.Pid’”
alias docker-ip=”sudo docker inspect _format ‘ .NetworkSettings.IPAddress ’”
#the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enter
function docker-enter()
if [ -e $(dirname "$0")/nsenter ]; then
# with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname “$0″)/nsenter
else
NSENTER=nsenter
fi
[ -z "$NSENTER" ] && echo “WARN Cannot find nsenter” && return
if [ -z "$1" ]; then
echo “Usage: `basename “$0″` CONTAINER [COMMAND [ARG]?]”
echo “”
echo “Enters the Docker CONTAINER and executes the specified COMMAND.”
echo “If COMMAND is not specified, runs an interactive shell in CONTAINER.”
else
PID=$(sudo docker inspect _format “.State.Pid” “$1″)
if [ -z "$PID" ]; then
echo “WARN Cannot find the given container”
return
fi
shift
OPTS=”_target $PID _mount _uts _ipc _net _pid”
if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
#sudo $NSENTER “$OPTS” su _ root
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid su _ root
else
# Use env to clear all host environment variables.
sudo $NSENTER _target $PID _mount _uts _ipc _net _pid env -i $@
fi
fi
docker使用
1,下载过程省略
2,下载一个nginx镜像
docker pull nginx:latest
3,下载完成之后,查看本地的镜像文件
docker images
4,启动nginx容器
docker run -p 8080:80 --name nginx_web -it nginx /bin/bash
参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。
5,进入一个容器
docker attach nginx
6,执行 nginx 启动nginx服务
7,在浏览器访问就可以了
以上是关于如何打开多个终端进入Docker容器?的主要内容,如果未能解决你的问题,请参考以下文章