【Docker】7种进入和退出Docker容器的方法详解,看看你平时都用哪一种?

CSDN 2024-08-17 17:07:04 阅读 99

Docker容器的引入,为现代软件开发和部署带来了极大的便利。容器化应用程序不仅提供了开发环境的一致性,还使得应用程序在不同环境中的迁移变得更加容易。然而,有时我们需要进入容器进行调试、检查或修改配置文件等操作。本文将详细介绍进入Docker容器的各种方法,并讲解如何安全退出容器,帮助你根据不同需求选择最合适的方式。

在这里插入图片描述


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:<code>gylzbk)

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【Docker】7种进入和退出Docker容器的方法详解,看看你平时都用哪一种?

概述1. 使用`docker exec`进入运行中的容器进入容器基本用法示例执行单个命令

安全退出

2. 使用`docker attach`附加到一个正在运行的容器进入容器基本用法示例

安全退出

3. 使用`docker run`启动并进入一个新的容器进入容器基本用法示例

安全退出

4. 使用`docker start`和`docker attach`重新进入一个停止的容器进入容器启动容器附加到容器

安全退出

5. 使用`nsenter`进入容器进入容器安装`nsenter`使用`nsenter`示例

安全退出

6. 使用SSH(需要容器内运行SSH服务)配置SSH安全退出

7. 使用`kubectl exec`在Kubernetes集群中进入容器进入容器基本用法示例

安全退出

结论

概述

Docker容器的引入,为现代软件开发和部署带来了极大的便利。容器化应用程序不仅提供了开发环境的一致性,还使得应用程序在不同环境中的迁移变得更加容易。然而,有时我们需要进入容器进行调试、检查或修改配置文件等操作。本文将详细介绍进入Docker容器的各种方法,并讲解如何安全退出容器,帮助你根据不同需求选择最合适的方式。

1. 使用<code>docker exec进入运行中的容器

docker exec命令是进入运行中的Docker容器最常用的方法之一,它允许你在指定的容器中运行新的命令。

进入容器

基本用法

docker exec -it <container_id_or_name> <command>

-i:保持标准输入流(stdin)打开。-t:分配一个伪终端(tty)。

示例

进入容器并打开Bash Shell:

docker exec -it my_container /bin/bash

进入容器并打开sh(适用于Alpine等轻量级Linux容器):

docker exec -it my_container /bin/sh

执行单个命令

在容器中执行单个命令,例如查看目录内容:

docker exec -it my_container ls

安全退出

在交互终端中,可以使用以下命令退出容器:

退出终端:直接输入exit或按下Ctrl+D

exit

2. 使用docker attach附加到一个正在运行的容器

docker attach命令允许你附加到一个已经在运行的容器的主进程(一般为启动时配置的CMD或ENTRYPOINT)。它共享容器的标准输入、标准输出和标准错误输出。

进入容器

基本用法

docker attach <container_id_or_name>

示例

附加到容器:

docker attach my_container

安全退出

docker attach适用于与容器的直接交互,但退出方式有所不同:

保持容器运行:按下 Ctrl+P 然后 Ctrl+Q 组合键。退出并停止容器:直接输入exit

exit

注意:Ctrl+PCtrl+Q 组合键只是将当前终端从容器上分离,而不是杀死容器;而输入exit则会真正关闭容器的主进程。

3. 使用docker run启动并进入一个新的容器

有时候你需要启动一个新容器并立即进入它进行操作。docker run命令可以在启动新的Docker容器时提供交互式终端。

进入容器

基本用法

docker run -it <image_name> <command>

示例

使用Ubuntu镜像启动新容器并进入Bash Shell:

docker run -it ubuntu /bin/bash

启动并进入Alpine镜像:

docker run -it alpine /bin/sh

安全退出

docker exec类似,在交互终端中,可以使用以下命令退出容器并停止:

退出终端:直接输入exit或按下Ctrl+D

exit

4. 使用docker startdocker attach重新进入一个停止的容器

如果容器已经停止,但你需要重新启动并进入它,可以先使用docker start启动容器,然后使用docker attach进行连接。

进入容器

启动容器

docker start <container_id_or_name>

附加到容器

docker attach <container_id_or_name>

安全退出

保持容器运行:按下 Ctrl+P 然后 Ctrl+Q 组合键。退出并停止容器:直接输入exit

exit

5. 使用nsenter进入容器

nsenter允许你进入已经运行的容器的命名空间。尽管nsenter不是Docker自带的工具,但在某些情况下非常有用。

进入容器

安装nsenter

可通过以下命令安装nsenter

sudo apt-get install -y util-linux

使用nsenter

首先找到容器的PID:

docker inspect --format '{ { .State.Pid }}' <container_id_or_name>

然后使用nsenter进入容器:

sudo nsenter -t <pid> -m -u -i -n -p /bin/bash

示例

假设容器的PID为1234:

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

安全退出

退出终端:直接输入exit或按下Ctrl+D

exit

6. 使用SSH(需要容器内运行SSH服务)

在某些情况下,特别是调试或特定的生产环境配置时,你可能希望通过SSH进入容器。这需要容器内运行一个SSH服务,并且容器暴露相应的端口。

配置SSH

Dockerfile中添加SSH安装和服务启动:

RUN apt-get update && apt-get install -y openssh-server

RUN mkdir /var/run/sshd

RUN echo 'root:password' | chpasswd

RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

构建镜像并运行容器:

docker build -t my_sshd_container .

docker run -d -p 2222:22 my_sshd_container

通过SSH连接容器:

ssh root@localhost -p 2222

安全退出

退出SSH会话:直接输入exit或按下Ctrl+D

exit

7. 使用kubectl exec在Kubernetes集群中进入容器

如果你在Kubernetes集群中运行容器,可以使用kubectl exec进入Pod内的容器。

进入容器

基本用法

kubectl exec -it <pod_name> -- <command>

示例

进入Pod并打开Bash Shell:

kubectl exec -it my_pod -- /bin/bash

执行单个命令:

kubectl exec -it my_pod -- ls

安全退出

退出终端:直接输入exit或按下Ctrl+D

exit

结论

通过本文的介绍,你已经了解到多种进入Docker容器的方法,包括 docker execdocker attachdocker rundocker startnsenter 等工具和命令。每种方法都有其适用的场景和特点,通过选择合适的方式,可以有效进行容器内的调试、检查和管理。在退出容器时,注意选择合适的方法来保证容器的正常运行或停止。如果你对容器化技术有更多兴趣,欢迎继续探索Docker和Kubernetes的更多功能!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。