通过nsenter连接docker容器
通常连接Docker容器并与其进行交互有四种方法。详情见:https://github.com/berresch/Docker-Enter-Demo,下面摘录nsenter连接的方式。
- 查看是否安装nsenter
- [root@localhost ~]# whereis nsenter
- nsenter: /usr/bin/nsenter /usr/share/man/man1/nsenter..gz
如果没安装可创建install.sh,并执行
- #!/bin/bash
- curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-
- cd util-linux-2.24
- ./configure --without-ncurses
- make nsenter
- sudo cp nsenter /usr/local/bin
- cd .. && rm -rf util-linux-2.24
- 方式一:创建docker-enter并置于$PATH下
- #!/bin/sh
- 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
- if [ -z "$1" ]; then
- echo "Usage: `basename "$"` 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=$(docker inspect --format "{{.State.Pid}}" "$1")
- if [ -z "$PID" ]; then
- exit
- 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.
- #"$NSENTER" $OPTS su - root
- "$NSENTER" $OPTS /bin/su - root
- else
- # Use env to clear all host environment variables.
- "$NSENTER" $OPTS env --ignore-environment -- "$@"
- fi
- fi
常见问题:nsenter: failed to execute su: No such file or directory
这是由于容器中的PATH 路径问题,使用/bin/su 即可。
- 方式二:也可以将其放在.bashrc中,就可以方便的使用了。(运行source ./bashrc不重启生效)
- #docker
- #export DOCKER_HOST=tcp://localhost:4243
- 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 "$"` 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
- }
执行:source ./bashrc,让修改生效。
进入容器:
- docker-enter 容器ID
通过nsenter连接docker容器的更多相关文章
- 分布式进阶(九)Ubuntu下使用nsenter进入Docker容器
使用nsenter进入Docker容器 Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动 ...
- windows 使用ssh连接docker容器
在Windows上搭建docker服务器需要在Windows模拟一个Linux平台,然后在Linux平台上搭建的docker服务器,所以在使用ssh工具连接docker容器的时候,使用的ip地址不是d ...
- docker学习端口连接docker容器---第四章节
一.Docker容器连接 前面的第二章节,我们事先通过网络端口来访问运行在docker容器内的服务,我们也可以通过端口连接到一个docker容器 我们可以指定容器绑定的网络地址,如绑定127.0.0. ...
- ssh连接docker容器
有两种方法: 1.通过宿主机的端口映射访问docker 在宿主机上启动容器,分配端口,启用ssh服务: docker run -p 10022:22 -d sshd:ubuntu /usr/sbin/ ...
- 使用nsenter进入docker容器后端报错 mesg: ttyname failed: No such file or directory
通过nsenter 进入到docker容器的后端总是报下面的错,, [root@devdtt ~]# docker inspect -f {{.State.Pid}} mynginx411950 [r ...
- PhpStorm连接Docker容器配置xdebug断点调试
本教程主要演示xdebug在PhpStorm中配置方法. 一.环境说明 1.Mac笔记本(本教程演示过程使用的是Mac OS操作系统,和windows环境是有区别的,这一点需要特别注意): 2.在Ma ...
- redis 连接 docker容器 6379端口失败
redis部署在docker容器中Could not connect to Redis 容器内redis-cli是可以直接连上的,但是在另一台服务器上就不能用外网ip来连了 虽然我创建redis容器时 ...
- Navicat 远程连接Docker容器中的mysql 报错:1251 - Client does not support authentication protocol 解决办法。
出现这个问题 首先进入 1.docker exec -it mysql02 bash //mysql02是mysql容器的别名 2.mysql -uroot -p 3.输入密码 4.进入my ...
- 工具系列 | PHPSTROM 连接Docker容器 && 配置XDEBUG调试
Docker 客户端配置 PHPSTROM 配置 选择连接 容器日志 配置Xdebug 开启Debug模式 打断点 浏览器访问该项目地址:http://wiot.frp.tinywan.top/
随机推荐
- 使用ab压测网页结果分析
使用ab压测网页结果分析 下载工具:ab 图片来自:http://my.oschina.net/u/1246814/blog/291696?fromerr=JfLeu1jk
- mysql中set autocommit=0与start transaction区别
set autocommit=0,当前session禁用自动提交事物,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务. start tra ...
- scala入门教程:scala中的面向对象定义类,构造函数,继承
我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...
- c# 日期函数[string.Format----GetDateTimeFormats]格式 .【转帖备查】
DateTime dt = DateTime.Now;Label1.Text = dt.ToString();//2005-11-5 13:21:25Label2.Text = dt.ToFileTi ...
- 自定义列表dl的使用原因和场合
为什么要使用自定义列表? dl和ol, ul的区别? 要正确理解dl的意图, 理解 dl的 "语义" ! 才能知道为什么要使用dl, 以及在什么时候/ 什么情况下使用 dl? dl ...
- 用jinja做了个E-Letter小项目
做了一个html E-Letter项目. 邮件模板采用jinja2, html 邮件内容生成简直太爽了. 整个项目开发只用了2个小时, 调试却花了大半天时间, 生成的邮件总是发不出去. 于是, 打开 ...
- 根据不同的实体及其ID来获取数据库中的数据
/// <summary> /// 根据不同的实体和其ID来获取信息 /// </summary> /// <typeparam name="T"&g ...
- jquery动态改变my97日期格式
$('#qsrq').unbind('focus'); $('#zzrq').unbind('focus'); $('#qsrq').bind('focus', function () { Wdate ...
- Mac Pro Office Word 2011 个性化设置
操作系统:Mac Pro OS X 10.11.5 1.常用的几个操作: (1).视图 -> 功能区 (2).视图 -> 打印版式 (3).视图 -> 大纲 (4).视图 -> ...
- 使用PHP的五个小技巧
PHP的一些小技巧,比较基础,总结一下,老鸟换个姿势飘过去就是. 1. str_replace str_replace是非常常常常常用的php函数,用于字符串替换,经常看到某些php新人为了替换一批字 ...