
如何用新终端(TTY)进入已经在运行的 Docker 容器?
docker exec -it 容器名 sh(或 bash)为运行中的容器开一个新终端会话;退出用 exit,不影响主进程。本文说明参数含义与无 shell 镜像的替代方案。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

docker exec -it 容器名 sh(或 bash)为运行中的容器开一个新终端会话;退出用 exit,不影响主进程。本文说明参数含义与无 shell 镜像的替代方案。

command 字段用 sh -c "cmd1 && cmd2 && cmd3" 串多条命令,YAML 用 > 折叠多行书写;更规范的做法是把初始化逻辑放 entrypoint 脚本。本文给出写法与注意事项。

重复写 -p 参数即可映射多个端口:docker run -p 80:80 -p 443:443 镜像;也可映射端口范围或绑定特定网卡 IP。compose 里 ports 是列表。注意容器内应用要真的监听这些端口。

不能。端口发布(-p)只能在创建容器时指定;docker container port 只是查看映射的命令。运行中想对外开端口:重建容器(标准)、iptables/socat 转发(应急)。本文说明各方案。

报 Is the docker daemon running 时按序排查:systemctl status/start docker 确认守护进程、sudo docker info 测连通、把用户加入 docker 组解决权限。

can not connect to docker daemon 的深层原因:DOCKER_HOST 环境变量指错、socket 路径被改、WSL/Desktop 集成断开、守护进程崩溃循环。本文按客户端→socket→守护进程三层排查。

该错误是当前用户无权访问 /var/run/docker.sock:把用户加入 docker 组(usermod -aG docker $USER)并重新登录即可;曾用 sudo 跑过 docker 的还要修 ~/.docker 目录属主。

容器名全局唯一,报名称冲突时:docker ps -a 找到占用者,docker rm 删除或 docker rename 改名;脚本化启动建议用 --rm 或不指定名字。本文给出处理流程。

先 docker system df 看空间去向,再 docker system prune -a 清理未使用资源;日志文件撑爆用 log-opt 限制,构建缓存用 builder prune。本文给出去向分析、清理命令与预防配置。

连接 Docker 报权限拒绝按此清单排查:用户在不在 docker 组、会话是否重登、~/.docker 属主是否被 sudo 污染、SELinux 是否拦截、是否该用 rootless。逐项排除即可解决。

容器内获取宿主机 IP:用 host.docker.internal 域名(Mac/Win 内置,Linux 加 --add-host),或读默认网关 ip route | awk '/default/ {print $3}',即 …

运行中的容器用 docker exec -it 容器名 bash/sh 进 shell;已停止的容器 commit 成镜像再跑;compose 用 docker compose exec 服务名 sh。