docker进入容器运行命令的使用及说明

 更新时间:2026年02月03日 16:44:40   作者:A_aspectJ项目开发  
本文介绍了如何使用Docker进入容器进行调试、管理和运行命令,主要包括使用docker exec、docker attach和nsenter命令进入容器的方法,并详细介绍了docker inspect命令的使用以及如何获取容器/镜像的元数据

前言

Docker是一种流行的容器化平台,它能够快速构建、交付和运行应用程序。在使用Docker时,我们经常需要进入容器进行调试、管理和运行命令等操作。

进入 docker 容器需要执行以下步骤:打开终端窗口。使用 docker ps 命令查看正在运行的容器。使用 docker exec -it /bin/bash 命令进入容器,在容器内执行命令,使用 exit 命令退出容器。

一、使用docker exec进入Docker容器

进入 Docker 容器的步骤很简单,只需一条命令即可完成:

要在Docker容器中运行命令,您可以使用docker exec命令。这里是一个基本的例子:

docker exec -it <container_id_or_name> <command>

其中<container_id_or_name>是您想要运行命令的容器的ID或名称,<command>是您想要执行的命令。

例如,如果您想要在名为mycontainer的容器中执行bash shell,您可以使用:

docker exec -it mycontainer bash

如果您想要在容器中运行一个不需要交互的命令,比如查看容器中的某个文件,您可以直接执行:

docker exec mycontainer cat /path/to/file

这将在mycontainer容器中执行cat /path/to/file命令,并将结果直接输出到您的终端。

其他命令提示说明:

识别容器名称:使用以下命令查看正在运行的容器列表:

 docker ps

这将输出容器名称、镜像名称、启动时间等信息。

执行 exec 命令:使用 docker exec 命令进入容器。例如,要进入名为 "my-container" 的容器,可以使用以下命令:

docker exec -it my-container /bin/bash
  • -i 选项表示在容器中打开一个交互式会话。
  • -t 选项表示为会话分配一个伪tty。
  1. /bin/bash 命令:/bin/bash 命令在容器中启动一个 bash 会话。
  2. 提示符:成功进入容器后,您将在命令提示符中看到 root@。这表示您现在已作为 root 用户登录到容器中。
  3. 执行命令:您现在可以在容器内执行命令,就像在普通 Linux 系统中一样。
  4. 退出容器:要退出容器,只需键入 exit 命令即可。

二、使用docker attach进入Docker容器

接下来我们创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。

$ sudo docker run -itd ubuntu:xx.xx /bin/bash  

 然后我们使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器

$ sudo docker attach container_id

 可以看到我们已经进入到该容器中了。但是,使用该命令有一个问题,当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。

因为这个原因,所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。

通常情况下,需要查看docker容器内stdout,会使用命令 docker attach container_id 来查看容器输出.但是不知道如何退出,使用Ctrl+c直接卡死。正确的退出方式应该用一个组合键 Ctrl+p Ctrl+q 然后容器会关闭,界面也可恢复。

三、使用nsenter进入Docker容器。

nsenter是用来进入容器内部的一个命令,它的优势之处在于可以自己选择加载容器的哪些namespaces

可以直接选择yum安装

$ yum install util-linux -y

也可以选择源码安装 

系统默认将我们需要的nsenter安装到主机中

如果没有安装的话,按下面步骤安装即可(注意是主机而非容器或镜像)

具体的安装命令如下:

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
$ tar -xzvf util-linux-2.24.tar.gz  
$ cd util-linux-2.24/  
$ ./configure --without-ncurses  
$ make nsenter  
$ sudo cp nsenter /usr/local/bin 

 安装好nsenter之后可以查看一下该命令的使用。先使用--help查看一下nsenter的帮助信息

 ​$ nsenter --help

 用法:
  nsenter [options] <program> [<argument>...]
 ​
 Run a program with namespaces of other processes.
 ​
 选项:
  -t, --target <pid>     要获取名字空间的目标进程
  -m, --mount[=<file>]   enter mount namespace
  -u, --uts[=<file>]     enter UTS namespace (hostname etc)
  -i, --ipc[=<file>]     enter System V IPC namespace
  -n, --net[=<file>]     enter network namespace
  -p, --pid[=<file>]     enter pid namespace
  -U, --user[=<file>]    enter user namespace
  -S, --setuid <uid>     set uid in entered namespace
  -G, --setgid <gid>     set gid in entered namespace
  --preserve-credentials do not touch uids or gids
  -r, --root[=<dir>]     set the root directory
  -w, --wd[=<dir>]       set the working directory
  -F, --no-fork          执行 <程序> 前不 fork
  -Z, --follow-context   set SELinux context according to --target PID
 ​
  -h, --help     显示此帮助并退出
  -V, --version  输出版本信息并退出

 可以看到选项很多,但是大致上都是进入某个namespace

 --mount参数是进去到mount namespace中
 --uts参数是进入到uts namespace中
 --ipc参数是进入到System V IPC namaspace中
 --net参数是进入到network namespace中
 --pid参数是进入到pid namespace中
 --user参数是进入到user namespace中

nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。可以使用docker inspect命令来获取该PID。

四、docker inspect命令使用

$ sudo docker inspect --help  

 inspect命令可以分层级显示一个镜像或容器的信息。使用docker ps 查看我们当前有一个正在运行的容器,可以使用docker inspect来查看该容器的详细信息。

$ sudo docker inspect container_id

 如果要显示该容器第一个进程的PID可以使用如下方式

$ sudo docker inspect -f {{.State.Pid}} container_id

在获取到该进程PID之后我们就可以使用nsenter命令访问该容器了。

$ sudo nsenter --target PID --mount --uts --ipc --net --pid  

五、docker inspect : 获取容器/镜像的元数据。

语法

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

  • -f :指定返回值的模板文件。
  • -s :显示总的文件大小。
  • --type :为指定类型返回JSON。

实例

获取镜像mysql:5.6的元信息。(展示部分信息)

命令:

xx@xx:~$ docker inspect mysql:5.6
[
    {
        "Id": "xx",
        "RepoTags": [
            "mysql:5.6"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "xx",
        "Container": "xx",
        "ContainerConfig": {
            "Hostname": "xx",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "3306/tcp": {}
            },
...

获取正在运行的容器mysql02的 IP。

xx@xx:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql02

Docker 常用的命令集

  • docker version: 显示Docker版本
  • docker info: 显示Docker信息
  • docker attach: 挂载正在后台运行的容器到前台
  • docker run: 在一个新的容器中执行命令 (Ctrl+p CTRL+q 退出至后台运行)
  • docker ps: 列出当前容器
  • docker images: 列出当前镜像
  • docker logs: 显示容器的日志
  • docker inspect: 显示镜像或容器的详细信息
  • docker stop: 停止运行中的容器 (Ctrl+d 强制退出, exited (0)表示正常退出)
  • docker kill: 杀掉一个运行中的容器 (exited (-1)表示异常退出)
  • docker start: 重启停止的容器
  • docker restart: 重启运行中的容器
  • docker cp: 拷贝容器中的文件
  • docker rm: 删除容器
  • docker top: 查看容器输出
  • docker events: 实时监听容器的事件
  • docker history: 显示镜像的历史记录
  • docker pull: 从远程拉取镜像
  • docker diff: 列出镜像中文件和目录的变化
  • docker commit: 将容器打包成新的镜像
  • docker build: 使用Dockerfile构建新镜像
  • docker tag: 为镜像加上标签
  • docker load: 将tar压缩文件保存为image
  • docker export: 把容器系统文件打包并导出来,方便分发给其他场景使用

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用docker部署若依前后端分离项目全过程

    使用docker部署若依前后端分离项目全过程

    部署前端项目Docker变得越来越流行,它可以轻便灵活地隔离环境,进行扩容,运维管理,这篇文章主要介绍了使用docker部署若依前后端分离项目的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • Docker本地部署Firefox火狐浏览器并远程访问的流程

    Docker本地部署Firefox火狐浏览器并远程访问的流程

    在Docker中打开Firefox意味着我们将在一个Docker容器中运行Firefox浏览器,下面是一个简单的示例,演示如何在Docker中打开Firefox,本次实践部署环境为本地环境,感兴趣的朋友一起看看吧
    2023-11-11
  • docker中查看日志的几种常见方式

    docker中查看日志的几种常见方式

    这篇文章主要给大家介绍了关于docker中查看日志的几种常见方式,Docker提供一些方式来查看容器的日志,文中将每种方法都给出了代码示例,需要的朋友可以参考下
    2023-08-08
  • 容器管理工具 Rancher的安装与使用

    容器管理工具 Rancher的安装与使用

    这篇文章主要介绍了容器管理工具 Rancher的安装与使用,通过本文学习可以掌握基于Rancher的应用部署、扩容缩容操作,本文实例图文相结合给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 详解挂载运行的docker容器中如何挂载文件系统

    详解挂载运行的docker容器中如何挂载文件系统

    这篇文章主要给大家介绍了如何在挂载运行中的docker容器中挂载文件系统,文中通过一步步的实践过程介绍的很详细,相信对有需要的朋友们来说具有一定的参考借鉴价值,感兴趣的朋友们下面来一起看看吧。
    2016-12-12
  • 基于docker安装mariadb配置过程解析

    基于docker安装mariadb配置过程解析

    这篇文章主要介绍了基于docker安装mariadb配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Docker compose配置文件写法及命令使用示例

    Docker compose配置文件写法及命令使用示例

    这篇文章主要介绍了Docker compose配置文件写法及命令总结使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03
  • Docker  Registry 私有仓库搭建详细步骤

    Docker Registry 私有仓库搭建详细步骤

    这篇文章主要介绍了Docker Registry 私有仓库搭建的相关资料,需要的朋友可以参考下
    2016-10-10
  • 如何修改 docker 容器的启动参数

    如何修改 docker 容器的启动参数

    工作中我们经常遇到docker容器运行一段时间后,因为各种原因需要调整启动参数的情况,这篇文章主要介绍了如何修改 docker 容器的启动参数,需要的朋友可以参考下
    2023-09-09
  • kali安装docker和portainer的配置方法

    kali安装docker和portainer的配置方法

    docker的出现给很多服务提供了方便,许多arm结构的硬件也能运行x86服务,今天给大家介绍kali安装docker和portainer的配置方法,感兴趣的朋友一起看看吧
    2021-06-06

最新评论