通常连接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. Mysql InnoDB行锁实现方式(转)

    Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...

  2. Java数据库连接池封装与用法

    Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...

  3. 前端排版-使用inline-block且两端对齐

    那天排遇到这样一个页面,每个logo紧挨着,而且两端对齐.尼玛,没招啊~ 今天终于找到了解决办法: <!DOCTYPE html> <html> <head> &l ...

  4. cmd /c和cmd /k 解释,附★CMD命令★ 大全

    cmd /c和cmd /k http://leaning.javaeye.com/blog/380810 java的Runtime.getRuntime().exec(commandStr)可以调用执 ...

  5. centos 安装php7.0.2

    PHP7.0正式版已经在2015年11月份左右发布,目前是PHP7.0.2版本,本人最早是从2015年8月php7的第一个测试版跟起,现在正式版发布. linux版本:64位CentOS 6.6 Ng ...

  6. 【Solr】索引库查询界面详解

    目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...

  7. post提交表单

    <script type="text/javascript"> $(function () { $("#btnRefresh1").click(fu ...

  8. N-Queens leetcode

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  9. Linux 利器- Python 脚本编程入门(一)

    导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写.大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会 ...

  10. Unity手游之路<九>自动寻路Navmesh之高级主题

    http://blog.csdn.net/janeky/article/details/17492531 之前我们一起学习了如何使用Navmesh组件来实现最基本的角色自动寻路.今天我们再继续深入探索 ...