要进入已运行的docker容器,先用docker ps确认容器处于up状态,再执行docker exec -it /bin/bash(或/bin/sh)进入;必要时加-u root提升权限,退出用exit或ctrl+d。

你需要在Mac终端中直接操作一个已启动但未保持前台交互的Docker容器,比如调试日志、检查进程或修改配置文件,而不是重新拉取镜像或新建容器。
确认容器正在运行
打开终端,执行 docker ps 查看当前活跃容器列表。如果目标容器没出现在输出里,说明它已停止——【必须是 Up 状态才能进入】。
若只看到已退出的容器,用 docker ps -a 查看全部记录,再用 docker start 启动它。
获取容器ID或名称
从 docker ps 输出中找到目标容器那一行,记下最左侧的 CONTAINER ID(一长串十六进制字符)或 NAMES 列下的名字(如 my-redis)。
名称比ID更易读、不易输错;如果 NAMES 是自动生成的(如 eloquent_cerf),建议后续用 --name 重命名或重建时指定明确名称。
进入容器命令行
方法一:使用 bash(推荐,功能完整)
执行 docker exec -it /bin/bash。
例如:docker exec -it my-nginx /bin/bash。
方法二:回退到 sh(当容器精简无 bash 时必选)
把上一步的 /bin/bash 换成 /bin/sh,即:docker exec -it my-redis /bin/sh。
Alpine 镜像、distroless 镜像等默认不带 bash,强行调用会报错 executable file not found in $PATH。
方法三:指定用户身份进入(避免权限问题)
加 -u root 强制以 root 身份进入:docker exec -u root -it my-app /bin/bash。
某些镜像默认以非 root 用户运行,不加 -u root 可能无法写入 /etc 或执行 systemctl 等操作。
验证是否成功进入
命令执行后,终端提示符变成类似 root@abcd1234efgh:/# 或 appuser@9b5eafc6ccbc:/$,说明已进入容器内部。
输入 ls / 看能否列出根目录内容,再执行 ps aux | grep nginx(针对 Nginx 容器)确认主进程仍在运行——这步能快速排除 exec 后容器意外退出的假象。
退出容器 shell 直接输入 exit 或按 Ctrl+D,容器本身仍后台运行,不受影响。











