远程调试Docker容器中的应用程序是一个常见的开发需求。以下是几种常用的方法:
# 在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
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Remote Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app"
}
]
}
]
}
对于不同语言的应用程序:
docker run -p 5678:5678 myapp python -m debugpy --listen 0.0.0.0:5678 --wait-for-client myapp.py
docker run -p 9229:9229 myapp node --inspect=0.0.0.0:9229 app.js
docker run -p 5005:5005 myapp java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar myapp.jar
# 进入运行中的容器
docker exec -it <container-id> /bin/bash
# 然后可以在容器内直接运行调试命令
对于Kubernetes中的服务:
telepresence --swap-deployment <your-deployment> --expose 5005:5005
docker network inspect
检查容器网络配置docker logs -f <container-id>
docker port <container-id>
--rm
和-it
标志运行临时容器进行调试选择哪种方法取决于您的具体需求、开发环境和应用程序类型。对于开发环境,VS Code的远程容器扩展提供了很好的集成体验;对于生产环境调试,更推荐使用安全的端口暴露方法。