通常连接Docker容器并与其进行交互有四种方法。详情见:https://github.com/berresch/Docker-Enter-Demo,下面摘录nsenter连接的方式。

  • 查看是否安装nsenter
  1. [root@localhost ~]# whereis nsenter
  2. nsenter: /usr/bin/nsenter /usr/share/man/man1/nsenter..gz

  如果没安装可创建install.sh,并执行

  1. #!/bin/bash
  2.  
  3. curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-
  4. cd util-linux-2.24
  5. ./configure --without-ncurses
  6. make nsenter
  7. sudo cp nsenter /usr/local/bin
  8. cd .. && rm -rf util-linux-2.24
  • 方式一:创建docker-enter并置于$PATH下
  1. #!/bin/sh
  2.  
  3. if [ -e $(dirname "$0")/nsenter ]; then
  4. # with boot2docker, nsenter is not in the PATH but it is in the same folder
  5. NSENTER=$(dirname "$0")/nsenter
  6. else
  7. NSENTER=nsenter
  8. fi
  9.  
  10. if [ -z "$1" ]; then
  11. echo "Usage: `basename "$"` CONTAINER [COMMAND [ARG]...]"
  12. echo ""
  13. echo "Enters the Docker CONTAINER and executes the specified COMMAND."
  14. echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
  15. else
  16. PID=$(docker inspect --format "{{.State.Pid}}" "$1")
  17. if [ -z "$PID" ]; then
  18. exit
  19. fi
  20. shift
  21.  
  22. OPTS="--target $PID --mount --uts --ipc --net --pid --"
  23.  
  24. if [ -z "$1" ]; then
  25. # No command given.
  26. # Use su to clear all host environment variables except for TERM,
  27. # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
  28. # and start a login shell.
  29. #"$NSENTER" $OPTS su - root
  30. "$NSENTER" $OPTS /bin/su - root
  31. else
  32. # Use env to clear all host environment variables.
  33. "$NSENTER" $OPTS env --ignore-environment -- "$@"
  34. fi
  35. fi

  常见问题:nsenter: failed to execute su: No such file or directory

  这是由于容器中的PATH 路径问题,使用/bin/su 即可。

  • 方式二:也可以将其放在.bashrc中,就可以方便的使用了。(运行source ./bashrc不重启生效)
  1. #docker
  2. #export DOCKER_HOST=tcp://localhost:4243
  3. alias docker-pid="sudo docker inspect --format '{{.State.Pid}}'"
  4. alias docker-ip="sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}'"
  5.  
  6. #the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enter
  7. function docker-enter() {
  8. if [ -e $(dirname "$0")/nsenter ]; then
  9. # with boot2docker, nsenter is not in the PATH but it is in the same folder
  10. NSENTER=$(dirname "$0")/nsenter
  11. else
  12. NSENTER=nsenter
  13. fi
  14. [ -z "$NSENTER" ] && echo "WARN Cannot find nsenter" && return
  15.  
  16. if [ -z "$1" ]; then
  17. echo "Usage: `basename "$"` CONTAINER [COMMAND [ARG]...]"
  18. echo ""
  19. echo "Enters the Docker CONTAINER and executes the specified COMMAND."
  20. echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
  21. else
  22. PID=$(sudo docker inspect --format "{{.State.Pid}}" "$1")
  23. if [ -z "$PID" ]; then
  24. echo "WARN Cannot find the given container"
  25. return
  26. fi
  27. shift
  28.  
  29. OPTS="--target $PID --mount --uts --ipc --net --pid"
  30.  
  31. if [ -z "$1" ]; then
  32. # No command given.
  33. # Use su to clear all host environment variables except for TERM,
  34. # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
  35. # and start a login shell.
  36. #sudo $NSENTER "$OPTS" su - root
  37. sudo $NSENTER --target $PID --mount --uts --ipc --net --pid su - root
  38. else
  39. # Use env to clear all host environment variables.
  40. sudo $NSENTER --target $PID --mount --uts --ipc --net --pid env -i $@
  41. fi
  42. fi
  43. }

  执行:source ./bashrc,让修改生效。

  进入容器:

  1. docker-enter 容器ID

通过nsenter连接docker容器的更多相关文章

  1. 分布式进阶(九)Ubuntu下使用nsenter进入Docker容器

    使用nsenter进入Docker容器 Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH.如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可.当我启动 ...

  2. windows 使用ssh连接docker容器

    在Windows上搭建docker服务器需要在Windows模拟一个Linux平台,然后在Linux平台上搭建的docker服务器,所以在使用ssh工具连接docker容器的时候,使用的ip地址不是d ...

  3. docker学习端口连接docker容器---第四章节

    一.Docker容器连接 前面的第二章节,我们事先通过网络端口来访问运行在docker容器内的服务,我们也可以通过端口连接到一个docker容器 我们可以指定容器绑定的网络地址,如绑定127.0.0. ...

  4. ssh连接docker容器

    有两种方法: 1.通过宿主机的端口映射访问docker 在宿主机上启动容器,分配端口,启用ssh服务: docker run -p 10022:22 -d sshd:ubuntu /usr/sbin/ ...

  5. 使用nsenter进入docker容器后端报错 mesg: ttyname failed: No such file or directory

    通过nsenter 进入到docker容器的后端总是报下面的错,, [root@devdtt ~]# docker inspect -f {{.State.Pid}} mynginx411950 [r ...

  6. PhpStorm连接Docker容器配置xdebug断点调试

    本教程主要演示xdebug在PhpStorm中配置方法. 一.环境说明 1.Mac笔记本(本教程演示过程使用的是Mac OS操作系统,和windows环境是有区别的,这一点需要特别注意): 2.在Ma ...

  7. redis 连接 docker容器 6379端口失败

    redis部署在docker容器中Could not connect to Redis 容器内redis-cli是可以直接连上的,但是在另一台服务器上就不能用外网ip来连了 虽然我创建redis容器时 ...

  8. 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 ...

  9. 工具系列 | PHPSTROM 连接Docker容器 && 配置XDEBUG调试

    Docker 客户端配置 PHPSTROM 配置 选择连接 容器日志 配置Xdebug 开启Debug模式 打断点 浏览器访问该项目地址:http://wiot.frp.tinywan.top/

随机推荐

  1. 使用ab压测网页结果分析

    使用ab压测网页结果分析 下载工具:ab 图片来自:http://my.oschina.net/u/1246814/blog/291696?fromerr=JfLeu1jk

  2. mysql中set autocommit=0与start transaction区别

    set autocommit=0,当前session禁用自动提交事物,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务. start tra ...

  3. scala入门教程:scala中的面向对象定义类,构造函数,继承

    我们知道scala中一切皆为对象,函数也是对象,数字也是对象,它是一个比java还要面向对象的语言. 定义scala的简单类 class Point (val x:Int, val y:Int) 上面 ...

  4. c# 日期函数[string.Format----GetDateTimeFormats]格式 .【转帖备查】

    DateTime dt = DateTime.Now;Label1.Text = dt.ToString();//2005-11-5 13:21:25Label2.Text = dt.ToFileTi ...

  5. 自定义列表dl的使用原因和场合

    为什么要使用自定义列表? dl和ol, ul的区别? 要正确理解dl的意图, 理解 dl的 "语义" ! 才能知道为什么要使用dl, 以及在什么时候/ 什么情况下使用 dl? dl ...

  6. 用jinja做了个E-Letter小项目

    做了一个html E-Letter项目. 邮件模板采用jinja2, html 邮件内容生成简直太爽了. 整个项目开发只用了2个小时, 调试却花了大半天时间, 生成的邮件总是发不出去. 于是, 打开 ...

  7. 根据不同的实体及其ID来获取数据库中的数据

    /// <summary> /// 根据不同的实体和其ID来获取信息 /// </summary> /// <typeparam name="T"&g ...

  8. jquery动态改变my97日期格式

    $('#qsrq').unbind('focus'); $('#zzrq').unbind('focus'); $('#qsrq').bind('focus', function () { Wdate ...

  9. Mac Pro Office Word 2011 个性化设置

    操作系统:Mac Pro OS X 10.11.5 1.常用的几个操作: (1).视图 -> 功能区 (2).视图 -> 打印版式 (3).视图 -> 大纲 (4).视图 -> ...

  10. 使用PHP的五个小技巧

    PHP的一些小技巧,比较基础,总结一下,老鸟换个姿势飘过去就是. 1. str_replace str_replace是非常常常常常用的php函数,用于字符串替换,经常看到某些php新人为了替换一批字 ...