Docker 进入容器,并在容器内执行命令

本文详细介绍了Docker exec命令的语法及参数,包括如何使用-it参数保持标准输入打开并分配终端,如何使用-d参数让命令在后台运行,以及如何指定用户运行。同时,文章还提供了查看运行中容器的方法,并演示了如何通过exec进入容器内部进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 语法:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

1.1 OPTIONS 参数说明:

-i: 让容器的标准输入(STDIN)始终保持打开,即使没有输入任何指令(没有附加)
-t: 分配一个终端,这样我们就可以使用命令来操作
-d: 分离模式,让命令在后台(指的是宿主后台)运行。
--user:指定用户运行,当我们需要 root 用户权限时可以指定。

【注】一般使用 -it 就足够了。

1.2 COMMAND 参数:

command 指的是 shell 的类型,常见的有bash、sh、zsh,但是 Linux 系统大多数默认的是 bash 类型,新版 Mac OS 系统的话,默认的不再是 bash ,而是 zsh

2. 查看正在运行的容器

docker ps

执行结果如下:

CONTAINER ID      IMAGE         COMMAND               CREATED          STATUS            PORTS                NAMES

91af26862191      nginx     "/docker-entrypoint.…"   7 hours ago       Up 2 hours       0.0.0.0:80->80/tcp     webserver

3. 使用 exec 进入容器

docker exec -it webserver bash 
#或 
docker exec -it 91af26862191 bash 

就可以进入到容器内部的命令行界面。

如果需要root权限的话,可以指定 root 用户进入容器:

docker exec -it --user root webserver bash
# 或
docker exec -it --user root 91af26862191 bash

【注】webserver91af26862191 都是容器的唯一标识,所以用哪个都可以。

一般容器里面的 Linux是精简版的,没有 less 、cat 、vim/vi 等命令,如果需要的话可以自己安装,默认自带 APT 命令。

4. 推荐的配置

如果是学习使用可以选择在容器内部安装其他命令,如果是正式环境的话推荐把各个容器的配置文件映射到宿主机器上(也就是装 Docker 的机器)方便维护

个人博客: Roc’s Blog

### 进入 Docker 容器的方法 #### 使用 `docker exec` 命令 可以通过 `docker exec` 命令进入正在运行的容器。此命令允许用户在一个已经启动的容器中执行交互式 shell 或其他命令。 ```bash docker exec -it <container_id_or_name> /bin/bash ``` 其中 `-i` 表示保持标准输入流打开,`-t` 表示分配伪终端[^1]。通过该方式可以轻松访问容器内的文件系统执行命令。 #### 使用 `docker attach` 命令 另一种方法是利用 `docker attach` 来附加到已有的容器会话上: ```bash docker attach <container_id_or_name> ``` 这种方式适用于希望直接连接至现有进程的标准输入/输出场景下工作,但它不具备重新创建一个新的shell session的能力[^2]。 需要注意的是,当使用 `docker attach` 脱离时可能会遇到一些特殊行为(比如按Ctrl+C可能终止容器),因此推荐优先考虑 `docker exec` 方案除非有特别需求需要用到前者[^3]。 #### 特殊情况下的处理 如果需要在某个特定环境下让子容器也能调用母机上的Docker服务,则需按照下面的方式设置环境变量以及挂载必要的资源路径: ```bash docker run --privileged \ --name='example_container' \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -itd alpine sh ``` 这里展示了如何将宿主机的 Docker Socket 和可执行程序映射给新建立起来的镜像实例以便于它能够正常操作外部世界里的Docker守护进程[^4]。 ### 示例代码展示 以下是基于上述理论的一个简单例子来演示怎样正确地进入到指定名称为myapp的服务进程中去探索其内部结构: ```bash # 查看当前有哪些活动状态中的containers docker ps # 根据返回列表找到目标条目对应的ID或者自定义标签名,假设叫'myapp' docker exec -it myapp /bin/sh ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roc.Chang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值