连接到Hyperledger的docker容器内部
========================================================
进入Docker容器的4种方式
========================================================
实际操作
root@ThinkPad-T450:/home/angie#./connectDocker.shorderer.example.com
容器ID:d8f8d32ed879
容器PID:18633
开始连接容器。。。
mesg:ttynamefailed:Nosuchfileordirectory
root@d8f8d32ed879:/#w
12:59:15up11:11,0users,loadaverage:0.32,0.38,0.40
USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT
root@d8f8d32ed879:/#ps-ef
UIDPIDPPIDCSTIMETTYTIMECMD
root10012:51?00:00:00orderer
root190012:59?00:00:00-bash
root2619013:00?00:00:00ps-ef
root@d8f8d32ed879:/#
========================================================
参考的文章
http://blog.csdn.net/u010716706/article/details/60965101
当我们运行好docker容器之后常常需要进入docker容器内部进行一些操作:
1.docker本身提供了attach命令可以实现这一需求:
$dockerattach[容器名]
attach连接docker后,退出docker容器有两种方式:
1.1按CTRL+D或者输入exit命令退出,这种方式会引起容器停止运行
1.2先按CTRL+P再按CTRL+Q退出,这种方式理论上不会引起容器停止运行,实际上还是偶尔引起容器停止运行,出现奇奇怪怪的问题。
所以,我打算介绍一种比较稳妥的方式。
2.利用util-linux包的nsenter命令连接docker容器
2.1安装util-linux步骤
$wgethttps://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.1.tar.gz-c/usr/local/src
$tarxvfutil-linux-2.29.1.tar.gz
$./configure–without-ncurses
$make#注意不要makeinstall
$cpnsenter/usr/local/bin/
2.2编写连接脚本:connect.sh
#!/bin/sh
CONTAINER_NAME=$1
if[!-n"$CONTAINER_NAME"];then
echo"请输入即将要登录的容器名称,例如要登录容器xiaoniuapp-api,请输入:./connect.shxiaoniuapp-api"
else
CONTAINER_ID=`dockerps-a|grep$CONTAINER_NAME-w|awk'{print$1}'`
echo"容器ID:"$CONTAINER_ID
CONTAINER_PID=`dockerinspect--format"{{.State.Pid}}"$CONTAINER_ID`
echo"容器PID:"$CONTAINER_PID
echo"开始连接容器。。。"
nsenter--target$CONTAINER_PID--mount--uts--ipc--net--pid
fi
2.3使用脚本
$chmodu+xconnect.sh
$./connect.sh[容器名]
示例如下:
[root@Dockerdeploy-app~]#dockerrun-i-t--namemynginxnginx/bin/bash
root@063e449682f7:/##先按CTRL+P再按CTRL+Q退出
[root@Dockerdeploy-app~]#dockerps-a
CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
063e449682f7nginx"/bin/bash"10secondsagoUp9seconds80/tcp,443/tcpmynginx
[root@Dockerdeploy-app~]#./connect.shmynginx
容器ID:063e449682f7
容器PID:1491
开始连接容器。。。
root@063e449682f7:/#