当前位置: 首页 > news >正文

docker进入容器运行命令

前言

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: 把容器系统文件打包并导出来,方便分发给其他场景使用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 鞋服企业信息化建设若干架构分享
  • OPENAIGC开发者大赛高校组银奖 | GOIS——面向地质报告的多场景办公智能助手
  • 【H2O2|全栈】关于Photoshop | PS(4)
  • 参数传了报错没传参数识别不到参数传丢
  • Redis集群_主从复制
  • 如何增加Google收录量?
  • ASP.NET Core 中间件
  • 制造业必看!推荐几款设备管理软件,产品特点一目了然!
  • 用EA和SysML一步步建模(06)使命声明-解构需求02
  • 【数据结构】希尔排序(缩小增量排序)
  • 进程调度相关
  • 构建数字化时代的企业:数据驱动的信息架构战略
  • python实现插入排序算法
  • 高防IP是如何防御攻击
  • 【C++登堂入室】类和对象(中)——类的6个默认成员函数
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【前端学习】-粗谈选择器
  • 10个确保微服务与容器安全的最佳实践
  • Android 控件背景颜色处理
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • C++类中的特殊成员函数
  • JS字符串转数字方法总结
  • Laravel Mix运行时关于es2015报错解决方案
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Terraform入门 - 3. 变更基础设施
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • webpack4 一点通
  • 诡异!React stopPropagation失灵
  • 基于游标的分页接口实现
  • 简单易用的leetcode开发测试工具(npm)
  • 三分钟教你同步 Visual Studio Code 设置
  • 三栏布局总结
  • 什么软件可以剪辑音乐?
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 移动端唤起键盘时取消position:fixed定位
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​Linux·i2c驱动架构​
  • # Maven错误Error executing Maven
  • #数据结构 笔记一
  • ()、[]、{}、(())、[[]]命令替换
  • (10)ATF MMU转换表
  • (16)Reactor的测试——响应式Spring的道法术器
  • (3)选择元素——(17)练习(Exercises)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (javascript)再说document.body.scrollTop的使用问题
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (pytorch进阶之路)扩散概率模型
  • (八)Flink Join 连接
  • (补充)IDEA项目结构
  • (苍穹外卖)day03菜品管理
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307