发布时间:2025-06-24 01:40来源:www.stxyjg.com作者:新羽手游网
修改一台主机docker默认的虚拟网段,然后在各自主机上分别把对方的docker网段加入到路由表中,即可实现docker容器夸主机通信。
Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入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 ~
$ 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:
alias docker-pid=”sudo docker inspect –format ‘{{.State.Pid}}’”
alias docker-ip=”sudo docker inspect –format ‘{{ .NetworkSettings.IPAddress }}’”
#the implementation refs from
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
}
下一篇:婴儿多大能喝纯牛奶,喝多少合适
萌宠解谜类似游戏?
王者荣耀英雄训练场攻略技巧
有没有跳舞类的小游戏?
王者荣耀从青铜到荣耀王者要多少局?
穿越火线手游怎么获得屠龙者边框?
部落冲突兵种先升级哪个好
好玩的手机单机游戏有哪些
十款好玩的云游戏?
类似帝国时代的单机手机游戏?
迷你世界
类型:休闲益智
钢琴音乐大师
类型:休闲益智
开心消消乐
类型:休闲益智
我的汤姆猫
类型:休闲益智
白块儿达人-节奏钢琴黑白块
类型:休闲益智
纸嫁衣4红丝缠
类型:休闲益智
停车我最强
类型:休闲益智
贪吃蛇大作战
类型:休闲益智
米加小镇:世界
类型:休闲益智