Docker 多終端登陸

版權聲明:starRTC免費im直播會議一對一視頻,by elesos.com & starRTC.com https://blog.csdn.net/elesos/article/details/60958098html

Docker容器運行後,如何進入容器進行操做呢?起初我是用SSH。若是隻啓動一個容器,用SSH還能應付,只須要將容器的22端口映射到本機的一個端口便可。當我啓動了五個容器後,每一個容器默認是沒有配置SSH Server的,安裝配置SSHD,映射容器SSH端口,實在是麻煩。 我發現不少Docker鏡像都是沒有安裝SSHD服務的,難道有其餘方法進入Docker容器?git

有不少種方法,包括使用 docker attach 命令或 nsenter 工具等。github

使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,全部窗口都會同步顯示。docker

nsenter 能夠訪問另外一個進程的名字空間。shell

爲了鏈接到容器,你還須要找到容器的第一個進程的 PID,能夠經過下面的命令獲取。bash

PID=¥(docker inspect --format "{{ .State.Pid }}" <container>) //將<container>換成你的容器id經過這個 PID,就能夠鏈接到這個容器:ide

 

¥ nsenter --target ¥PID --mount --uts --ipc --net --pid工具

 

¥ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
¥ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrcpost

 


這個文件中定義了不少方便使用 Docker 的命令,例如 docker-pid 能夠獲取某個容器的 PID;而 docker-enter 能夠進入容器或直接在容器內執行命令。.net

¥ 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-enterfunction docker-enter(){if[-e ¥(dirname"¥0")/nsenter ]; then# with boot2docker, nsenter is not in the PATH but it is in the same folderNSENTER=¥(dirname"¥0")/nsenter
elseNSENTER=nsenter
fi[-z"¥NSENTER"]&&echo"WARN Cannot find nsenter"&&return
 
if[-z"¥1"]; thenecho"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."elsePID=¥(sudo docker inspect --format"{{.State.Pid}}""¥1")if[-z"¥PID"]; thenecho"WARN Cannot find the given container"returnfishift
 
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 - rootsudo¥NSENTER--target¥PID--mount--uts--ipc--net--pidsu - root
else# Use env to clear all host environment variables.sudo¥NSENTER--target¥PID--mount--uts--ipc--net--pidenv-i ¥@fifi}
藝搜參考
http://www.hjue.me/post/docker-nsenter

http://yeasy.gitbooks.io/docker_practice/content/container/enter.html--------------------- 做者:github.com/starRTC 來源:CSDN 原文:https://blog.csdn.net/elesos/article/details/60958098 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索