如何打开多个终端进入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容器?的主要内容,如果未能解决你的问题,请参考以下文章

docker的容器常规操作

使用tmux进入docker容器

docker 容器修改端口

docker下容器怎么执行命令?

docker 容器操作

docker 容器操作