docker进入容器运行命令

server/2024/10/20 16:38:20/

前言

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 常用的命令集:

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

http://www.ppmy.cn/server/113533.html

相关文章

最新SMS测压SMS源码 全新版本

php调至7.3 设置伪静态为thinkphp 设置网站运行目录为public 编辑根目录下的.env文件配置数据库信息 详细教程请看源码内置说明文本&#xff01; 亲测截图&#xff01;真实有效&#xff01; 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/8972239…

HTML5 --- 进阶教程

HTML5作为现代网页开发的核心技术之一,不仅继承了HTML4的所有功能,还引入了大量新特性和API,极大地丰富了网页的表现力和交互性。本教程旨在深入探索HTML5的进阶知识,涵盖多个重要领域,并通过实战演示加深理解。 一、HTML5语义化标签 1.1 语义化标签的重要性 语义化标签…

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数&#xff08;开口向下&#xff09;&#xff0c;如下&#xff1a; 因为要使得其存在正解&#xff0c;必须满足&#xff0c;那么。 上述函数的最优结果为&#xff1a;&#xff0c;。 对应的mathematica代码如下&#xff1a; Clear[&q…

分布式光伏的劣势

能量供应不稳定&#xff1a;受天气影响大&#xff1a;分布式光伏主要依靠太阳能发电&#xff0c;天气状况对其发电量影响显著。在阴雨、多云或雾霾等天气条件下&#xff0c;光伏板接收的太阳辐射大幅减少&#xff0c;发电量会急剧下降&#xff0c;导致电力供应不稳定。例如在连…

一文理解粒子滤波

0. 粒子滤波流程 之前学习记录的文档&#xff0c;这里也拿出来分享一下~ 基本原理&#xff1a;随机选取预测域的 N NN 个点&#xff0c;称为粒子。以此计算出预测值&#xff0c;并算出在测量域的概率&#xff0c;即权重&#xff0c;加权平均就是最优估计。之后按权重比例&…

Django+Vue音乐推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

IstoreOS内网域名解析 修改网页端口

设置了自定义DNS&#xff0c;解析到Istore的IP&#xff0c;安装了1Panel&#xff0c;想用1Panel做域名解析&#xff0c;但是需要80和443端口。 这俩端口被IstoreOS占用了&#xff0c;下面修改 修改网页端口 https://github.com/istoreos/istoreos/issues/47 opkg update opkg…

SprinBoot+Vue食堂预约点餐微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…