通过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/
随机推荐
- Mysql InnoDB行锁实现方式(转)
Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...
- Java数据库连接池封装与用法
Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...
- 前端排版-使用inline-block且两端对齐
那天排遇到这样一个页面,每个logo紧挨着,而且两端对齐.尼玛,没招啊~ 今天终于找到了解决办法: <!DOCTYPE html> <html> <head> &l ...
- cmd /c和cmd /k 解释,附★CMD命令★ 大全
cmd /c和cmd /k http://leaning.javaeye.com/blog/380810 java的Runtime.getRuntime().exec(commandStr)可以调用执 ...
- centos 安装php7.0.2
PHP7.0正式版已经在2015年11月份左右发布,目前是PHP7.0.2版本,本人最早是从2015年8月php7的第一个测试版跟起,现在正式版发布. linux版本:64位CentOS 6.6 Ng ...
- 【Solr】索引库查询界面详解
目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...
- post提交表单
<script type="text/javascript"> $(function () { $("#btnRefresh1").click(fu ...
- N-Queens leetcode
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- Linux 利器- Python 脚本编程入门(一)
导读 众所周知,系统管理员需要精通一门脚本语言,而且招聘机构列出的职位需求上也会这么写.大多数人会认为 Bash (或者其他的 shell 语言)用起来很方便,但一些强大的语言(比如 Python)会 ...
- Unity手游之路<九>自动寻路Navmesh之高级主题
http://blog.csdn.net/janeky/article/details/17492531 之前我们一起学习了如何使用Navmesh组件来实现最基本的角色自动寻路.今天我们再继续深入探索 ...