Docker 进入容器并运行下令的方法

[复制链接]
发表于 2026-1-20 19:37:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目次


 
明白 Docker 容器的根本概念
使用 docker exec 进入运行中的容器
根本用法
常用选项分析
选项详解
实际案例演示
1. 进入容器的交互式 Shell
2. 在容器中运行单个下令
3. 以指定用户运行下令
4. 设置情况变量并运行下令
5. 指定工作目次
使用 docker attach 附加到容器
docker attach 与 docker exec 的区别
使用场景及注意事项
示例
附加到容器
分离容器而不绝止
使用 nsenter 下令进入容器
什么是 nsenter
使用步调
1. 获取容器的 PID
2. 使用 nsenter 进入容器
3. 简化利用
通过 SSH 进入容器
设置 SSH 服务
1. 安装 SSH 服务
2. 设置 SSH
3. 袒露端口
安全性思量
进入克制状态的容器
使用 docker commit 创建新镜像
1. 提交镜像
2. 启动新容器
使用 docker export 和 docker import
1. 导出容器文件体系
2. 导入为新镜像
3. 启动新容器
常见标题及办理方案
无法进入容器的常见缘故起因
1. 容器已经克制
2. 容器内缺少须要的 Shell
容器中下令不可用的处理处罚
1. 缺少须要的工具
2. 文件体系为只读
总结
参考资料



 
Docker 已经成为当代软件开辟和摆设的核心工具,它提供了一种轻量级的方式来运行和管理容器化应用步调。在一样平常使用中,开辟者和运维职员经常须要进入容器内部举行调试、检察日记、运行下令等利用。本文将深入探究各种进入 Docker 容器并运行下令的方法,包罗根本下令、进阶本领以及常见标题的办理方案,力叱责面覆盖干系知识点。

明白 Docker 容器的根本概念

在深入探究怎样进入 Docker 容器之前,有须要对 Docker 容器的根本概念有一个清晰的明白。Docker 容器是运行在 Docker 引擎上的一个隔离的进程情况,它包罗了应用步调及其全部依靠项。
Docker 容器的特点:


  • 轻量级:共享主机的内核,启动速率快,占用资源少。
  • 可移植性:容器化的应用可以在任何安装了 Docker 的呆板上运行。
  • 隔离性:通过定名空间和控制组,实现进程和资源的隔离。
明白这些特点有助于我们更好地把握怎样与容器举行交互。

使用 docker exec 进入运行中的容器

docker exec 下令是进入运行中的 Docker 容器并在此中实验下令的重要方式。它允许我们在容器内启动一个新的进程,这对于调试和管理容器非常有用。
根本用法

  1.  
复制代码
  1. docker exec [选项] <容器ID或名称> <命令>
复制代码


 
常用选项分析

选项形貌-i保持标准输入打开,纵然没有附加(attach)-t分配一个伪终端(tty)-d分离模式下运行下令-u, --user以指定用户运行下令-e, --env设置情况变量-w, --workdir指定工作目次--privileged授予扩展权限--detach-keys覆盖容器的分离键序列选项详解


  • -i 和 -t
    这两个选项通常一起使用,-i 选项让容器的标准输入保持打开状态,-t 选项为容器分配一个伪终端。这使得我们可以与容器内的进程举行交互。
  • -d
    在配景运行下令,不会附加到容器的控制台。这对于在容器中运行配景任务很有用。
  • -u
    指定在容器内运行下令的用户,可以是用户名或 UID。比方,-u root 表现以 root 用户身份运行。
  • -e
    设置情况变量,可以多次使用该选项来设置多个情况变量。
  • -w
    设置容器内的工作目次,类似于在下令行中使用 cd 切换目次。
实际案例演示

1. 进入容器的交互式 Shell
  1.  
复制代码
  1. docker exec -it <容器ID或名称> /bin/bash
复制代码


 
如果容器的根本镜像是基于 Debian 或 Ubuntu,那么 /bin/bash 通常可用。如果是基于 Alpine,则须要使用 /bin/sh。
示例:
  1.  
复制代码
  1. docker exec -it my_container /bin/bash
复制代码


 
2. 在容器中运行单个下令
  1.  
复制代码
  1. https://store.steampowered.com/
复制代码
这将在容器内的 /app 目次下列出文件,但不会进入交互式 Shell。
3. 以指定用户运行下令
  1. docker exec -u www-data -it <容器ID或名称> /bin/bash
复制代码
以 www-data 用户的身份进入容器的 Shell。
4. 设置情况变量并运行下令
  1. docker exec -e ENV_VAR=value -it <容器ID或名称> /bin/bash
复制代码
在容器内设置情况变量 ENV_VAR,然后进入 Shell。
5. 指定工作目次
  1. docker exec -w /app -it <容器ID或名称> /bin/bash
复制代码
进入容器后,当前目次为 /app。

使用 docker attach 附加到容器

docker attach 下令用于附加到一个已经运行的容器的主进程上,与 docker exec 差别,它不会创建新的进程。
docker attach 与 docker exec 的区别

特性docker execdocker attach是否创建新进程是否是否须要指定下令是否是否附加到主进程否,创建并附加到新进程是,附加到容器的主进程多个会话支持可以创建多个独立的会话会共享同一个标准输入/输出重要用途在容器内运行新下令或启动新 Shell检察容器主进程的输出或举行交互使用场景及注意事项



  • 检察容器主进程的输出
    如果容器的主进程是一个交互式应用步调,如 redis-cli,可以使用 docker attach 举行交互。
  • 注意输入辩说
    多个会话同时使用 docker attach 附加到同一个容器时,输入会发生辩说,全部会话共享同一个标准输入。
  • 分离容器
    使用 Ctrl + P 和 Ctrl + Q 可以安全地从容器分离,而不绝止容器。
示例

附加到容器
  1. docker attach <容器ID或名称>
复制代码
分离容器而不绝止
在附加到容器的会话中,按下 Ctrl + P,然后按 Ctrl + Q,即可分离。

使用 nsenter 下令进入容器

nsenter 是 Linux 下的一个工具,可以让我们进入另一个进程的定名空间。Docker 容器的隔离性是通过定名空间实现的,使用 nsenter 可以直接进入容器的定名空间。
什么是 nsenter

nsenter 下令允许我们进入指定的定名空间,比方进程、网络、IPC、UTS、用户和挂载定名空间。
使用步调

1. 获取容器的 PID
起首,须要获取容器在宿主机上的进程 ID。
  1. docker inspect --format "{{ .State.Pid }}" <容器ID或名称>
复制代码
示例:
  1. CONTAINER_PID=$(docker inspect --format "{{ .State.Pid }}" my_container)
复制代码
2. 使用 nsenter 进入容器
  1. nsenter -t $CONTAINER_PID -n -m -u -i -p /bin/bash
复制代码
选项分析:


  • -t:指定目标进程的 PID。
  • -n:进入网络定名空间。
  • -m:进入挂载定名空间。
  • -u:进入 UTS 定名空间(主机名和域名)。
  • -i:进入 IPC 定名空间。
  • -p:进入 PID 定名空间。
3. 简化利用
可以编写一个脚本或函数来简化上述利用。
示例脚本:
  1. docker-enter() {
  2.   CONTAINER_PID=$(docker inspect --format "{{ .State.Pid }}" $1)
  3.   nsenter -t $CONTAINER_PID -n -m -u -i -p /bin/bash
  4. }
复制代码
然后使用:
  1.  
复制代码
docker-enter my_container

通过 SSH 进入容器

只管 Docker 的计划初志是不在容器内运行 SSH 服务,而是使用 docker exec 等下令,但某些情况下,大概须要通过 SSH 进入容器。
设置 SSH 服务

1. 安装 SSH 服务
在容器内安装 SSH 服务,比方 OpenSSH。
  1. apt-get update && apt-get install -y openssh-server
复制代码
2. 设置 SSH


  • 天生主机密钥:
    1. ssh-keygen -A
    复制代码
  • 设置 root 暗码:
    1.  
    复制代码
    echo 'root:password' | chpasswd
  • 启动 SSH 服务:
    1.  
    复制代码
    /usr/sbin/sshd
3. 袒露端口
在启动容器时,映射 SSH 服务的端口。
  1. docker run -d -p 2222:22 my_ssh_image
复制代码
安全性思量



  • 增长攻击面
    在容器内运行 SSH 服务会增长安全风险,由于它为潜伏的攻击者提供了额外的入口点。
  • 最佳实践

    • 尽大概使用 docker exec 代替 SSH。
    • 如果必须使用 SSH,确保使用强暗码或密钥认证。
    • 限定 SSH 的监听所在,仅允许内部网络访问。


进入克制状态的容器

偶尔候,容器已经克制运行,但我们须要检察此中的文件或设置。由于容器已经克制,无法直接进入,这里先容几种方法来处理处罚这种情况。
使用 docker commit 创建新镜像

将克制的容器提交为一个新镜像,然后基于该镜像启动一个新的容器。
1. 提交镜像
  1. docker commit <容器ID或名称> new_image_name
复制代码
2. 启动新容器
  1. docker run -it new_image_name /bin/bash
复制代码
使用 docker export 和 docker import

导出容器的文件体系,然后重新导入为新镜像。
1. 导出容器文件体系
  1. docker export <容器ID或名称> -o container.tar
复制代码
2. 导入为新镜像
  1. docker import container.tar new_image_name
复制代码
3. 启动新容器
  1. docker run -it new_image_name /bin/bash
复制代码

常见标题及办理方案

无法进入容器的常见缘故起因

1. 容器已经克制
如果容器已经克制,docker exec 和 docker attach 都无法进入容器。
办理方案:


  • 使用 docker start 启动容器。
  • 使用 docker commit 或 docker export 创建新镜像。
2. 容器内缺少须要的 Shell
有些轻量级的根本镜像(如 alpine)大概没有 /bin/bash,只有 /bin/sh。
办理方案:


  • 使用 /bin/sh 进入容器:
    1. docker exec -it <容器ID或名称> /bin/sh
    复制代码
容器中下令不可用的处理处罚

1. 缺少须要的工具
容器内大概缺少某些下令或工具,如 vi、ping 等。
办理方案:


  • 使用包管理器安装所需工具。
    Debian/Ubuntu:
    1. apt-get update && apt-get install -y vim
    复制代码
    Alpine:
    1. apk update && apk add vim
    复制代码
2. 文件体系为只读
某些容器大概以只读模式运行,无法安装新软件。
办理方案:


  • 重新启动容器,移除只读限定。
    1. docker run -it --read-only=false <镜像名称> /bin/bash
    复制代码

总结

把握怎样进入 Docker 容器并在此中运行下令是一样平常开辟和运维工作中必不可少的技能。本文详细先容了多种进入容器的方法,包罗 docker exec、docker attach、nsenter、通过 SSH 进入容器,以及处理处罚克制状态容器的方法。还讨论了常见标题及办理方案。
以下是各种方法的对比总结:
方法实用场景是否创建新进程是否须要容器运行docker exec在运行中的容器内实验新下令或进入交互式 Shell是是docker attach附加到容器的主进程,检察输出或举行交互否是nsenter须要深入容器定名空间,或在特别情况下使用否是通过 SSH 进入容器特别需求下的长途登录,但不保举是是docker commit + 新容器处理处罚克制状态的容器,检察文件体系是否(创建新容器)docker export + 导入处理处罚克制状态的容器,备份或迁移是否(创建新镜像)最佳实践:


  • 优先使用 docker exec
    它是进入运行中容器的最安全、最便捷的方法。
  • 制止在容器内运行 SSH 服务
    这与 Docker 的计划理念不符,增长了安全风险。
  • 熟悉根本镜像的特点
    根据镜像范例选择准确的 Shell,如 /bin/bash 或 /bin/sh。
  • 处理处罚克制的容器
    通过提交镜像或导出文件体系来检察或规复数据。
渴望本文能资助您更深入地明白 Docker 容器的利用,进步工作服从。在实际工作中,根据详细情况选择最符合的方法。



 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表