如何配置VSCode与Cloud Code远程调试Kubernetes中的TypeScript Node应用
可以通过VSCode Cloud Code远程调试Kubernetes中的TypeScript Node应用
核心问题分析
你之前能调试JS应用,但TS调试卡壳的原因有两个:
- 容器中仅包含编译后的JS文件,缺少原始TS源码与Source Map文件,调试器无法映射本地源码
- Node进程未开启远程调试模式,无法接收VSCode的调试连接
解决方案步骤
1. 修改Dockerfile,保留源码与调试所需文件
调整镜像构建逻辑,将原始TS源码、tsconfig.json以及编译生成的Source Map文件(dist目录下的.map文件)一并复制到生产镜像中,同时开启Node的远程调试端口:
FROM node:19-alpine as builder WORKDIR /app COPY package*.json ./ COPY tsconfig.json ./ RUN npm install COPY . . RUN npm run build # 生成带Source Map的JS文件 FROM node:19-alpine WORKDIR /app COPY package*.json ./ RUN npm install --production # 复制编译产物、源码、配置文件 COPY --from=builder /app/dist ./dist COPY --from=builder /app/src ./src COPY --from=builder /app/tsconfig.json ./tsconfig.json EXPOSE 3000 9229 # 开放应用端口与调试端口9229 # 启动Node时开启远程调试模式,允许外部连接 CMD ["node", "--inspect=0.0.0.0:9229", "./dist/index.js"]
2. 配置Skaffold(确保调试端口转发)
在skaffold.yaml中添加端口转发规则,将容器的9229调试端口映射到本地:
portForward: - resourceType: deployment resourceName: 你的应用Deployment名称 port: 9229 localPort: 9229
3. 更新launch.json的Cloud Code调试配置
在原有Kubernetes配置中添加debug字段,指定Node调试器类型、源码路径映射规则:
{ "configurations": [ { "name": "Kubernetes: Run/Debug", "type": "cloudcode.kubernetes", "request": "launch", "skaffoldConfig": "${workspaceFolder}\\skaffold.yaml", "watch": false, "cleanUp": false, "portForward": true, "imageRegistry": "zzz.common.repositories.zzz.zzz", "debug": { "debugger": "node", // 映射容器内源码路径到本地路径 "sourceMapPathOverrides": { "/app/src/*": "${workspaceFolder}/lcs/src/*" }, "port": 9229 } }, // 本地调试配置保留 { "type": "node", "request": "launch", "name": "Local Debug", "runtimeExecutable": "node", "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"], "args": ["${workspaceRoot}/lcs/src/index.ts"], "cwd": "${workspaceRoot}/lcs", "internalConsoleOptions": "openOnSessionStart", "env": { "NODE_ENV": "development" }, "skipFiles": ["<node_internals>/**", "node_modules/**"] } ] }
4. 验证调试流程
- 确认
tsconfig.json中sourceMap已设为true - 重新构建镜像并通过Cloud Code部署到Kubernetes
- 启动「Kubernetes: Run/Debug」配置,此时VSCode会自动连接到容器的调试端口,你可以直接在本地TS文件中设置断点进行调试
内容的提问来源于stack exchange,提问作者MilesDyson
相关产品推荐
相关产品推荐

