插件窝 干货文章 docker怎么远程调试(debug)

docker怎么远程调试(debug)

调试 容器 Docker 使用 754    来源:    2025-04-29

Docker远程调试指南

远程调试Docker容器中的应用程序是一个常见的开发需求。以下是几种常用的方法:

1. 使用SSH进入容器调试

# 在Dockerfile中添加SSH支持
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# 构建并运行容器
docker build -t myapp .
docker run -d -p 2222:22 --name myapp_container myapp

# 从远程机器SSH进入容器
ssh root@<docker-host-ip> -p 2222

2. 使用VS Code远程调试

  1. 安装VS Code的"Remote - Containers"扩展
  2. 在容器中安装调试工具(如Python的ptvsd、Node的inspector等)
  3. 配置VS Code的launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Remote Attach",
            "type": "python",
            "request": "attach",
            "port": 5678,
            "host": "localhost",
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "/app"
                }
            ]
        }
    ]
}

3. 暴露调试端口

对于不同语言的应用程序:

Python (使用ptvsd或debugpy)

docker run -p 5678:5678 myapp python -m debugpy --listen 0.0.0.0:5678 --wait-for-client myapp.py

Node.js

docker run -p 9229:9229 myapp node --inspect=0.0.0.0:9229 app.js

Java (使用JDWP)

docker run -p 5005:5005 myapp java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar myapp.jar

4. 使用Docker exec直接调试

# 进入运行中的容器
docker exec -it <container-id> /bin/bash

# 然后可以在容器内直接运行调试命令

5. 使用Telepresence (Kubernetes环境)

对于Kubernetes中的服务:

telepresence --swap-deployment <your-deployment> --expose 5005:5005

调试技巧

  1. 网络检查:使用docker network inspect检查容器网络配置
  2. 日志查看docker logs -f <container-id>
  3. 端口映射验证docker port <container-id>
  4. 临时容器:使用--rm-it标志运行临时容器进行调试

安全注意事项

  1. 生产环境不要使用root权限和简单密码
  2. 调试完成后关闭调试端口
  3. 考虑使用VPN或SSH隧道保护调试连接

选择哪种方法取决于您的具体需求、开发环境和应用程序类型。对于开发环境,VS Code的远程容器扩展提供了很好的集成体验;对于生产环境调试,更推荐使用安全的端口暴露方法。