赞
踩
Docker容器可以理解为一个简化版的Linux系统,包括root用户权限、进程空间、用户空间等,既然是操作系统,就可以进入到容器内部,完成Linux相关的操作。本文介绍几种目前比较常用的进入Docker容器的方式。
docker attch
docker attach应该算是一个已经过时的命令,但最新的docker版本仍提供其功能,下面来演示如果使用其进入到已启动容器中。
1. 使用docker pull nginx
拉取nginx镜像,通过docker images
可以查看镜像是否已经拉取到本地。
2. 使用attach进入容器,则要求启动容器时必须存在-it
和/bin/bash
参数,用以进行终端共享,示例命令如下:
docker run --name securititnginx -it -d -p 80:80 nginx:latest /bin/bash
容器启动后,查看容器运行状态。
3. 最后使用attach命令进入容器,然后可以像在系统内一样进行需要的操作。
进入到容器后,进行了系列操作,cd到了Nginx的html静态资源目录,可以看到的是,容器本身提供的功能十分精简,像最常用的ll
命令都未安装,如果需要的话,根据个人需要安装即可。
4. 容器中有很多中方式可以退出,例如:Ctrl+C
、Ctrl+D
、Ctrl+Q
。
退出命令 | 命令描述 |
---|---|
Ctrl+C | 退出容器,同时会关闭容器 |
Ctrl+D | 与exit同义,退出容器,同时会关闭容器 |
Ctrl+Q | 退出容器,恢复到主机终端,不会关闭容器 |
5. 注意:需要着重注意的是,attach命令十分依赖容器的启动方式,若是启动时没有-it
和/bin/bash
参数,那么会出现如下的卡死问题。
docker exec
1. 使用docker pull nginx
拉取nginx镜像,通过docker images
可以查看镜像是否已经拉取到本地。
2. 使用任意命令启动容器:
docker run --name securititnginx -d -p 80:80 nginx:latest
容器启动后,查看容器运行状态。
3. 最后使用exec命令进入容器,此后即可正常对容器进行操作,与attach一样。
4. 容器中可以使用Ctrl+D
或直接输入exit
退出容器。
ssh 连接
1. 使用docker pull centos
拉取nginx镜像,通过docker images
可以查看镜像是否已经拉取到本地。
2. 运行如下命令启动容器,启动后需要额外的终端用于进入容器。
docker run --name securititssh -it -p 10022:22 --privileged centos:7 /usr/sbin/init
注意: 需要着重说明的是,启动时必需--privileged
和/usr/sbin/init
参数,否则在容器内使用systemctl
命令时会出现如下的错误(Failed to get D-Bus connection: Operation not permitted):
3. 开启一个新的终端,在终端使用docker exec
命令进入容器内部。
docker exec -it e1c61b8a9cec /bin/bash
在容器内运行如下命令,安装SSH相关服务。
yum -y install passwd openssl openssh-server
运行如下命令,开启容器的SSH服务同时设置用户密码。
# 启动SSH服务.
systemctl start sshd
# 设置SSH开启启动.
systemctl enable sshd
# 设置用户密码.
passwd
4. 通过SSH连接容器时,IP是宿主机器的IP地址,PORT是容器启动时的映射端口,用户名和密码是之前在容器内设置的。
· 可以使用如下命令通过SSH连接到容器。
ssh -p 10022 root@192.168.20.50
· 还可以通过Xshell等工具进行连接,只需按照正常配置IP、PORT以及口令密码即可。
nsenter 连接
nsenter是一个命令行工具,用来进入到进程的linux namespace中。
docker提供了exec命令可以进入到容器中,nsenter具有跟docker exec差不多的执行效果,但是更底层,特别是docker daemon进程异常的时候,nsenter的作用就显示出来了,因此可以用于排查线上的docker问题。
本文演示使用的是Centos7,Centos7默认安装了nsenter命令,可以直接使用。
# 查看容器对应的进程号.
docker inspect b564267a6ca8 -f '{{.State.Pid}}'
# 使用nsenter进入到容器.
nsenter --target 6554 --mount --uts --ipc --net --pid
若是使用的Linux版本过低,没有安装nsenter,可以自行搜索安装。
总结
当下载了镜像,启动了容器,此时进入容器就成了下一步需要做的事情,本文提供了进入容器的四种方式的详细演示,可以提供简单的参考。
若文中存在错误和不足,欢迎指正!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。