如何进入 Docker 容器

2025-06-20 08:52:12
推荐回答(2个)
回答1:

  从util-linux版本2.23开始,nsenter工具就包含在其中。它用来访问另一个进程的名字空间。nsenter要正常工作需要有root权限。很不幸,Ubuntu 14.4仍然使用的是util-linux版本2.20。安装最新版本的util-linux(2.24)版,请按照以下步骤:

  为了连接到容器,你还需要找到容器的第一个进程的PID。

  docker inspect --format "{{ .State.Pid }}" 

  通过这个PID,你就可以连接到这个容器:

  nsenter --target $PID --mount --uts --ipc --net --pid
   

  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 -v github.com/dotcloud/docker/vendor/src/github.com/docker/libcontainer/nsinit

  nsinit读取的是位于/var/lib/docer/execdriver/native/容器目录下的配置数据。要运行nsinit,你需要切换到容器目录下。由于/var/lib/docker目录对于root用户是只读权限,因此你还需要root权限。通过docker的ps命令,你可以确定容器ID。一旦你进入/var/lib/docker目录,你就可以连接容器了:

  nsinit exec /bin/bash


  

  

  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  -- /bin/bash


  

  

  

  sshd

  上面所有三种方法都要求具有主机系统的root权限。为了不采用root权限,通过ssh访问容器将是一个很好的选择。

  要做到这一点,你需要构建一个支持SSH服务的基础映像。此时,我们可能遇到这样的问题:我们是不是用Docker CMD或者ENTRYPOINT运行一条命令就可以了?如果此时有sshd进程运行,那么我们就不要再运行其他进程了。接下来的工作是创建一个脚本或者使用像supervisord这样的进程管理工具来启动其它所有需要启动的进程。有关如何使用supervisord的 优秀的文档可以在Docker的web站点上找到。一旦你启动了具有sshd进程的容器,你就可以像以往一样通过ssh客户端了连接这个容器了。

  

回答2:

  安装Docker

  借助apt-get命令,安装Docker是件轻而易举的事。

  $ sudo apt-get install docker.io

  为了允许非根用户也可以运行Docker,将你自己添加到docker群组。下面这个命令会允许当前用户运行Docker,无需根用户权限。

  $ sudo usermod -a -G docker $USER

  退出,然后重新登录,以激活群组成员的变化。

  下一步,编辑Docker配置文件,以便更新Docker二进制代码的位置。

  $ sudo vi /etc/default/docker.io DOCKER="/usr/bin/docker.io"

  重启Docker服务。

  $ sudo service docker.io restart

  管理Docker容器

  如果你想启动Ubuntu操作系统的一个新的Docker容器,首先需要获取Ubuntu
Docker映像文件。下面这个命令会通过网络下载Docker映像文件。

  $ docker pull ubuntu

  你可以以一种交互模式来开启Ubuntu
Docker,如下所示。最后一个参数“/bin/bash”是一旦启动就将在容器里面执行的命令,这里是一个简单的bash外壳命令。

  $ docker run -i -t ubuntu /bin/bash