
运行中的 Docker 容器能动态暴露端口吗?
不能。端口发布(-p)只能在创建容器时指定;docker container port 只是查看映射的命令。运行中想对外开端口:重建容器(标准)、iptables/socat 转发(应急)。本文说明各方案。
聚焦概念、架构、排障、价格与选型,一篇解决一个明确问题。

不能。端口发布(-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。

depends_on 配 condition: service_healthy 可让 Y 等 X 通过健康检查后启动;X 需定义 healthcheck。只控制顺序不等就绪是旧版行为。本文给出完整配置示例。

用 Docker volume 管理持久数据:docker volume create 创建,docker run -v 卷名:/容器路径 挂载,容器删了数据还在;备份可用临时容器打包。数据库类有状态服务必须挂卷。

传环境变量给容器:docker run -e KEY=VALUE 逐个传、-e KEY 透传宿主变量、--env-file .env 批量传;compose 用 environment 或 env_file。本文含秘钥管理建议。