Docker进入容器的命令详解
Docker是一个开源的平台,可以在容器中构建、运行和部署应用程序,它采用了轻量级的方式,将应用程序和依赖项打包到一个可移植的容器中。在Docker中,可以使用多种方式进入到容器中,例如使用attach
命令、使用exec
命令、使用nsenter
命令等。本文将详细介绍Docker进入容器的命令。
一、attach命令
使用docker attach
命令可以在主机与一个正在运行的Docker容器之间建立一个会话连接。这个命令相当于打开了一个容器窗口,可以在容器中执行操作并查看容器的运行状态。
使用命令前需要注意:
- 目标容器必须正在运行
$ 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
- 同时只能有一个会话连接到容器
- 当从容器中退出时,容器也将停止
执行
attach
命令:
$ docker attach nginx
使用Ctrl+P
和Ctrl+Q
来退出容器连接,此时容器仍然在运行状态。
二、exec命令
exec
命令可以在已经运行的Docker容器中执行新的命令。
使用命令前需要注意:
- 目标容器必须正在运行
- 如果容器在后台运行,则在执行
exec
命令时需要添加参数-d
表示执行命令时不要停止容器:
$ docker exec -d nginx touch /tmp/abc.txt
- 如果容器不在后台运行,则执行命令后会自动停止容器。
$ 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
使用命令前需要注意:
- 目标容器必须正在运行
- 需要知道目标容器的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。
使用命令前需要注意:
- 目标容器必须正在运行
- 在启动Docker容器时,需要暴露终端口,例如使用
docker run -it
命令启动容器。
$ docker run -it --name nginx nginx /bin/bash
执行进入容器Shell的命令:
$ docker exec -it nginx /bin/bash
以上就是Docker进入容器的命令详解,通过上述命令可以便捷地操作Docker容器,进一步提高容器的使用效率。