Tiusx

生产环境为何禁止SSH进入Docker容器及替代调试方案

· 开发

适用环境

  • 生产环境Docker/K8s集群
  • 运维习惯SSH登录容器查看日志、修改配置

问题现象

容器化上线后,运维习惯SSH登录容器。部分团队在Dockerfile安装openssh‑server,镜像体积膨胀,还存在root密码泄露安全风险。

根本原因

容器是进程隔离,不是虚拟机。生产容器应当无状态、不可变。 如果登录容器修改文件,会破坏镜像一致性;同时启动sshd违背「一个容器只运行一个主进程」的最佳实践。

解决方案

1. 使用 docker exec / kubectl exec 临时调试

docker exec -it container_id /bin/sh
kubectl exec -it pod_name -- /bin/sh

只用来排查问题,禁止修改容器内配置文件

2. 通过环境变量注入配置

环境差异全部通过ENV环境变量注入,不要运行时修改配置文件。

3. 集中日志与监控体系

  • 日志:stdout + ELK 收集
  • 指标:暴露metrics接口,Prometheus采集
  • 链路追踪:SkyWalking等APM工具

4. 远程调试端口(仅限测试环境)

Java开启JDWP、PHP开启Xdebug端口映射,不要用SSH。

团队规范建议

生产环境所有变更必须走CI/CD重建镜像。 不允许exec进去修改文件。 排查问题可以使用临时调试容器(ephemeral container)。