云码酷 发表于 2024-11-21 18:47:53

使用SSH进入Docker下进行指令操作




前提条件:
确保 Docker 容器正在运行。你可以通过docker ps命令来查看正在运行的容器列表。这个命令会显示容器的 ID、镜像名称、创建时间、状态、端口映射等信息。例如:

docker ps

输出结果可能类似如下:
plaintext

CONTAINER ID   IMAGE   CREATED      STATUS      PORTS       NAMES

123456789abc   centos    10 minutes ago Up 10 minutes       my_container


其中123456789abc是容器 ID,my_container是容器名称,这些信息在后续进入容器终端时会用到。


进入容器终端的方法:

1、使用docker exec命令(推荐)
语法:docker exec -it <容器ID或名称> /bin/(如果容器内的默认 shell 是)或者docker exec -it <容器ID或名称> /bin/sh(如果容器内是sh作为默认 shell)。
例如,对于上面提到的容器,可以使用以下命令进入容器终端:


docker exec -it 123456789abc /bin/
或者
docker exec -it my_container /bin/

解释:
-it是两个参数的组合。-i表示以交互模式运行,允许你在容器终端中输入命令并获取输出;-t表示为容器终端分配一个伪终端,这样会使终端体验更接近本地终端的操作。
<容器ID或名称>就是前面通过docker ps查看到的容器标识,用于指定要进入终端的容器。
/bin/或/bin/sh是在容器内要启动的 shell 程序,用于提供命令行交互环境。


2、使用nsenter工具(较复杂,适用于特殊情况)
首先需要安装nsenter工具。在基于 Debian 或 Ubuntu 的系统中,可以使用以下命令安装:

sudo apt -y install util - linux
在基于 CentOS 或 RHEL 的系统中,可以使用:

sudo yum -y install util - linux - ng

然后找到容器的 PID(进程 ID)。可以通过docker inspect命令来获取。例如:

docker inspect -f '{{.State.Pid}}' 123456789abc

这个命令会输出容器对应的进程 ID,假设输出为9876。
最后使用nsenter工具进入容器。例如:

nsenter -t 9876 -m -u -i -n -p /bin/

解释:
-t指定目标进程的 PID(这里是前面获取到的容器进程 ID)。
-m、-u、-i、-n、-p分别表示挂载命名空间、用户命名空间、IPC 命名空间、网络命名空间和 PID 命名空间,通过这些参数可以让nsenter工具进入容器对应的各种命名空间,从而在容器的环境中执行命令。
/bin/同样是启动容器内的 shell 程序用于交互。
进入容器终端后,你就可以在容器内部执行各种命令,如安装软件、配置环境、查看文件等,就好像你在容器所在的操作系统内部进行操作一样。

ems2 发表于 2024-11-21 18:47:53

路过的帮顶

w4uef 发表于 2024-11-21 18:58:43

我了个去,顶了

uoclp 发表于 2024-11-21 19:10:03

嘘,低调。

uh3kdg 发表于 2024-11-21 19:21:03

占位编辑

tza 发表于 2024-11-21 19:32:03

啥玩应呀

ah3n0 发表于 2024-11-21 19:42:33

为保住菊花,这个一定得回复!

ejtr8 发表于 2024-11-21 19:52:44

前排顶,很好!

rwz2fp 发表于 2024-11-21 20:03:59

打酱油的人拉,回复下赚取积分

tynnj4 发表于 2024-11-21 20:15:34

好帖必须得顶起
页: [1] 2
查看完整版本: 使用SSH进入Docker下进行指令操作