docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter
编写如下脚本,命名为enter-docker
#!/bin/bash
PID=$(docker inspect --format "{{ .State.Pid }}" $1)
nsenter --target $PID --mount --uts --ipc --net --pid
将脚本改为755权限,并放到PATH环境变量所指的目录,如/usr/bin
然后就可以直接用
enter-docker <容器ID>/<容器名称>
进入容器了。如下图所示。
2.nsinit
从0.9版本开始,Docker自身就具有一个管理容器的库,名字为 libcontainer。libcontainer中的nsinit工具允许用户直接访问linux名字空间和cgroup内核。在安装nsinit之前,你首先需要安装Go运行时环境:
apt-get install git golang-go
mkdir -p $HOME/go-dev/binmkdir -p $HOME/go-dev/src
echo "export GOPATH=\$HOME/go-dev" >> ~/.profileecho"PATH=\$PATH:\$GOPATH/bin" >> ~/.profile
source ~/.profile
接下来才安装nsinit:
mkdir -p $GOPATH/src/github.com/dotcloudcd $GOPATH/src/github.com/dotcloud
git clone https://github.com/dotcloud/docker.gitcd $GOPATH/src/github.com/dotcloud/docker
/usr/bin/go get -vgithub.com/dotcloud/docker/vendor/src/github.com/docker/libcontainer/nsinit
nsinit读取的是位于/var/lib/docer/execdriver/native/<container-id>容器目录下的配置数据。
要运行nsinit,你需要切换到容器目录下。由于/var/lib/docker目录对于root用户是只读权限,因此你还需要root权限。
通过docker的ps命令,你可以确定容器ID。一旦你进入/var/lib/docker目录,你就可以连接容器了:
nsinit exec /bin/bash
3.lxc(-attach)
直到Docker 0.8.1版本为止,LXC一直是管理容器的基本工具,Docker一直支持这个工具。但是从0.9.0版本开始,Docker默认使用libcontainer管理容器,不再依赖LXC了。因此默认情况下,你不能使用lxc-attach了。
如果你仍然希望使用lxc-attach,那么你需要使用-e lxc选项来重新启动Docker服务进程。使用这个选项,Docker的内部将再次使用LXC管理容器了。完成这个任务最简单的做法就是创建/etc/default/docker文件(如果这个文件仍然不存在),并添加以下内容:
DOCKER_OPTS=” -e lxc”
现在你可以重新启动Docker服务了。要连接容器,你需要知道完整的容器ID:
docker ps –no-trunc
接下来,你就可以连接这个容器了。要完成下面工作,你还需要root权限:
lxc-attach -n <container-id> — /bin/bash
上面所有三种方法都要求具有主机系统的root权限。为了不采用root权限,通过ssh访问容器将是一个很好的选择。
要做到这一点,你需要构建一个支持SSH服务的基础映像。此时,我们可能遇到这样的问题:我们是不是用Docker CMD或者ENTRYPOINT运行一条命令就可以了?如果此时有sshd进程运行,那么我们就不要再运行其他进程了。接下来的工作是创建一个脚本或者使用像supervisord这样的进程管理工具来启动其它所有需要启动的进程。有关如何使用supervisord的 优秀的文档可以在Docker的web站点上找到。一旦你启动了具有sshd进程的容器,你就可以像以往一样通过ssh客户端了连接这个容器了。
5.docker attach命令
docker attach <容器ID>/<容器名称>
然后回车即可进入容器,需要主机的是,如果使用Ctrl+D退出容器,将导致容器关闭。
只能使用Ctrl+P然后Ctrl+Q退出容器。
此命令从1.1版本开始有效。
相关推荐
本文介绍了Docker如何进入启动容器,分享给大家,具体如下: 在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。 这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的...
kubectl exec进入到docker容器中进行查看时发现,文件在容器中也是中文文件名显示异常。查看docker容器编码格式:执行locale命令;可以看到当前编码格式为POSIX,而这种编码格式不支持中文 解决办法:locale -a查
2.启动并进入bash docker run -it -d ubuntu:lastest /bin/bash # 查看刚刚运行容器的id docker ps # 在容器中执行bash命令 docker exec -it id /bin/bash 3.安装openssh-server并启动 apt-get update apt-get ...
Docker容器与容器云(第2版)根据Docker 1.10版和Kubernetes 1.2版对第1版进行了全面更新,从实践者的角度出发,以Docker和Kubernetes为重点,沿着“基本用法介绍”到“核心原理解读”到“高级实践技巧”的思路,一本...
进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢? 如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记! 以下示例为退出容器但不关闭容器 ...
Docker容器技术
为了避免反复进入docker容器内部操作,可以将一系列容器内部的指令由宿主机来操作完成。 在宿主机(作者主机为windows7)上执行centos容器(name为centos-1)中/usr目录下的“printer”可执行程序,该程序输出为打印...
输入docker-fzf 使用fzf的功能输入正在运行的docker容器 安装 和 fisher derphilipp/enter-docker-fzf 用法 enter-docker-fzf
Docker容器详解 1 1. 介绍 1 1.1. 什么是Docker? 1 1.2. 为什么需要Docker? 1 1.3. Docker可以干嘛? 1 1.4. 什么是Dockfile? 1 1.5. 什么是Docker Compose? 5 2. 环境搭建 8 2.1. Docker环境准备 8 ...
我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢。下面介绍三种方法解决容器互访问题。 方式一、虚拟ip访问 安装docker时,docker会默认创建一个内部的桥接网络docker0,...
详细描述了如何进度docker容器,以及详细描述了如何退出docker容器而不会导致容器退出,本文只是记录平时遇到的问题解决方案
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container> 或 docker inspect 或 docker ...
不错的学习资料,实时所有开发人员,大家放心下载,进入主页进行寻找入口
使用docker-sshd ,您可以从任何地方通过ssh进入 docker 容器,就像docker exec -ti CONTAINER_ID /bin/bash在 docker 主机上一样。 +-------------+ | | ssh CONTAINER1@docker-sshd +--------------------+ |...
如何检查Docker容器时区是否与宿主机一致? 1、进入宿主机, 执行以下命令: # 查看宿主机时间 [root@localhost ~]# date 2018年 06月 27日 星期三 22:42:44 CST 2、进入到容器中,执行以下命令 # 查看容器时间 ...
有时候我们想执行某个容器的某条命令,但又不想进入容器内。那该怎么办? 于是脚本可以这样写 #!/bin/bash DOCKER_ID=62f3f40ab240 sudo docker exec -it $DOCKER_ID /bin/bash -c 'cd /packages...(docker容器加上pr
1. 创建并运行 一个容器 docker run -it --rm centos:latest bash run 运行容器 -it 以交互方式运行容器 --rm 退出容器后删除容器 centos:latest 基于 镜像启动容器 ... 进入 容器 docker exec -it [容器id] ba
拿到交付的docker镜像后,启动后进入容器控制台,使用date命令查看果然时间不正确。再查看宿主机时间是正确,这样肯定是容器启动时未将时区与宿主机保持同步了,由于测试镜像是由dockfile直接构建,因此问题基本了定...
docker命令、包括重启、删除容器、删除镜像等等;查看容器详细信息;进入到docker容器等常用命令