查询容器并进入

结城 Docker 3 次阅读 535 字 发布于 11 天前 预计阅读时间: 2 分钟


使用命令行方式进入容器实际上进入的是一个独立的环境,类似于新进入了一台主机,直接看如果不注意是看不出来的,一定要注意环境是否正确。

理论上现在所有的容器都会自带SH,但是BASH不一定会有,这一点需要注意。

不小心把自己封禁到服务器外,可以执行命令重启容器,解除自己的封禁

docker restart 容器ID

如果不想进入容器内部,只需要执行docker命令,直接将命令在容器内部执行

# 直接发送重载命令到容器
docker exec <container_name_or_id> nginx -s reload

使用 docker exec

这是最常用的方法,适用于已运行的容器。

# 进入容器的交互式终端
docker exec -it <容器名称或ID> /bin/bash

# 如果容器没有bash(如Alpine),使用sh
# docker exec -it <容器名称或ID> /bin/sh

参数说明:

  • -i:保持标准输入打开(交互模式)
  • -t:分配伪终端
  • /bin/bash​ 或 /bin/sh:容器内可用的 Shell

示例:

# 查看正在运行的容器
docker ps

# 输出示例
CONTAINER ID   IMAGE          COMMAND       NAMES
a1b2c3d4e5f6   nginx:latest   "nginx -g ..."   my-nginx

# 进入容器
docker exec -it my-nginx /bin/bash

启动新容器时直接进入

docker run -it --name my-container <镜像名称> /bin/bash
  • -it:启动交互式终端
  • 适用于调试新容器

常见问题处理

  1. 容器未运行
   # 先启动容器
   docker start <容器名称或ID>
   # 再进入
   docker exec -it <容器名称或ID> /bin/bash
  1. 容器内无 Bash/Sh
  • 尝试安装 Shell(如容器有包管理器): # 对于 Alpine docker exec -it <容器ID> apk add bash
  1. 查看容器内进程
   docker top <容器名称或ID>

总结步骤

  1. docker ps 查找目标容器
  2. docker exec -it <容器> /bin/bash 进入
  3. 执行所需命令后,用 exit 退出

根据容器镜像选择合适的 Shell​(如 bash​、sh​ 或 ash​),若遇到权限问题可尝试在命令前加 sudo​ 或用 docker exec --user root ...​ 切到 root 用户。