您的位置:

Docker进入容器的命令详解

Docker是一个开源的平台,可以在容器中构建、运行和部署应用程序,它采用了轻量级的方式,将应用程序和依赖项打包到一个可移植的容器中。在Docker中,可以使用多种方式进入到容器中,例如使用attach命令、使用exec命令、使用nsenter命令等。本文将详细介绍Docker进入容器的命令。

一、attach命令

使用docker attach命令可以在主机与一个正在运行的Docker容器之间建立一个会话连接。这个命令相当于打开了一个容器窗口,可以在容器中执行操作并查看容器的运行状态。

使用命令前需要注意:

1. 目标容器必须正在运行

$ docker run -d --name nginx nginx
$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
f8df6e46b571   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   80/tcp   nginx

2. 同时只能有一个会话连接到容器

3. 当从容器中退出时,容器也将停止

执行attach命令:

$ docker attach nginx

使用ctrl+p和ctrl+q来退出容器连接,此时容器仍然在运行状态。

二、exec命令

exec命令可以在已经运行的Docker容器中执行新的命令。

使用命令前需要注意:

1. 目标容器必须正在运行

2. 如果容器在后台运行,则在执行exec命令时需要添加参数-d表示执行命令时不要停止容器:

$ docker exec -d nginx touch /tmp/abc.txt

3. 如果容器不在后台运行,则执行命令后会自动停止容器。

$ docker run -it --name nginx nginx /bin/bash
$ docker exec nginx touch /tmp/abc.txt

三、nsenter命令

Docker使用Linux的namespace技术,在容器内部创建一个独立的命名空间,包括进程树、网络、文件系统等资源隔离。nsenter命令可以进入到容器的命名空间内执行操作。

使用nsenter前需要安装util-linux包:

sudo apt-get install -y util-linux

使用命令前需要注意:

1. 目标容器必须正在运行

2. 需要知道目标容器的PID号

$ docker inspect -f '{{.State.Pid}}' nginx
145

执行nsenter命令:

$ sudo nsenter -t 145 -m -u -i -n -p /bin/bash

其中-t选项为PID号,-m、-u、-i、-n、-p分别代表进入命名空间的类型,包括mount命名空间、UTS命名空间、IPC命名空间、network命名空间、PID命名空间。

四、进入Docker运行容器的Shell

除了使用attach和exec命令进入容器内部,还可以使用docker exec -it命令进入Docker容器的Shell。

使用命令前需要注意:

1. 目标容器必须正在运行

2. 在启动Docker容器时,需要暴露终端口,例如使用docker run -it命令启动容器。

$ docker run -it --name nginx nginx /bin/bash

执行进入容器Shell的命令:

$ docker exec -it nginx /bin/bash

以上就是Docker进入容器的命令详解,通过上述命令可以便捷地操作Docker容器,进一步提高容器的使用效率。