Docker 进入容器方式详解

  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+CCtrl+DCtrl+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,可以自行搜索安装。

  总结

  当下载了镜像,启动了容器,此时进入容器就成了下一步需要做的事情,本文提供了进入容器的四种方式的详细演示,可以提供简单的参考。

  若文中存在错误和不足,欢迎指正!

进入之前启动的Docker容器,可以使用两种方法:docker attachdocker exec。但是docker attach命令已经过时,最新的Docker版本仍然提供其功能。因此,更推荐使用docker exec命令来进入容器内部。 要使用docker exec命令进入容器内部,可以通过在终端中运行以下命令: ``` docker exec -it <容器ID> /bin/bash ``` 其中,容器ID是你要进入容器的唯一标识符。这个命令将打开一个新的终端,并进入指定的容器内部。 值得注意的是,docker attach命令还具有共享屏幕的功能,当两个终端同时使用docker attach命令进入同一个容器时,可以看到同步操作。但是为了进入之前的容器,更推荐使用docker exec命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker 进入容器方式详解](https://blog.csdn.net/securitit/article/details/109467446)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【Docker 那些事儿】如何安全地进入容器内部](https://blog.csdn.net/m0_63325890/article/details/125242682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值