使用命令行方式进入容器实际上进入的是一个独立的环境,类似于新进入了一台主机,直接看如果不注意是看不出来的,一定要注意环境是否正确。
理论上现在所有的容器都会自带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:启动交互式终端 - 适用于调试新容器
常见问题处理
- 容器未运行:
# 先启动容器
docker start <容器名称或ID>
# 再进入
docker exec -it <容器名称或ID> /bin/bash
- 容器内无 Bash/Sh:
- 尝试安装 Shell(如容器有包管理器):
# 对于 Alpine docker exec -it <容器ID> apk add bash
- 查看容器内进程:
docker top <容器名称或ID>
总结步骤
-
docker ps查找目标容器 -
docker exec -it <容器> /bin/bash进入 - 执行所需命令后,用
exit退出
根据容器镜像选择合适的 Shell(如 bash、sh 或 ash),若遇到权限问题可尝试在命令前加 sudo 或用 docker exec --user root ... 切到 root 用户。

Comments NOTHING