vscode开发配置

docker-build 任务

  1. {
  2. "type": "docker-build",
  3. "label": "docker-build",
  4. "platform": "node",
  5. "dockerBuild": {
  6. // 默认是package.json所在目录的Dockerfile
  7. "dockerfile": "${workspaceFolder}/Dockerfile",
  8. // 默认是package.json所在的目录
  9. "context": "${workspaceFolder}",
  10. // 默认是package.jsonname字段,或者package.json所在的目录的目录名
  11. "tag": "",
  12. // 构建参数
  13. "buildArgs": "",
  14. // 设置lables,默认如下
  15. "labels": {
  16. "com.microsoft.created-by": "visual-studio-code"
  17. },
  18. // 设置创建的容器名, 默认是{tag}-dev
  19. "target": ""
  20. // 在构建前是否更新所依赖的镜像
  21. "pull": true,
  22. },
  23. node: {
  24. // 指定pagecakge.jons文件
  25. "package": "package.json
  26. }
  27. "
  28. },

docker-run 任务

  1. {
  2. "type": "docker-run",
  3. "label": "docker-run: debug",
  4. "dependsOn": [
  5. "docker-build"
  6. ],
  7. "dockerRun": {
  8. // 指定创建容器的镜像名字
  9. "image":"",
  10. // 指定容器启动后,运行的命令
  11. "command":"",
  12. // 指定容器名字
  13. "containerName":"",
  14. // 设置环境变量
  15. "env": {
  16. "DEBUG": "*",
  17. "NODE_ENV": "development"
  18. },
  19. // 指定环境变量文件列表
  20. "envFiles": ".env",
  21. // 设置lables,默认如下
  22. "labels": {
  23. "com.microsoft.created-by": "visual-studio-code"
  24. },
  25. // 指定network
  26. "network":"",
  27. // 指定networkAlias
  28. "networkAlias":"",
  29. // 指定os
  30. "os":"",
  31. // 指定本地机与容器的端口映射,
  32. "ports":[{
  33. // 指定容器绑定的端口
  34. "containerPort":"",
  35. // 指定主机绑定的端口,默认是有docker自动选择
  36. "hostPort":"",
  37. // 指定os
  38. "protocol":"tcp | udp",
  39. }],
  40. // 是否将EXPOSE的端口全部映射到本地机的随机端口
  41. "portsPublishAll": true | false ,
  42. // 指定extraHosts
  43. "extraHosts":[{
  44. // DNS解析的主机名
  45. "hostname":"",
  46. //与上述主机名关联的IP地址
  47. "ip":"",
  48. ]],
  49. // 指定volumes
  50. "volumes":[{
  51. // 将映射的本地计算机上的路径
  52. "localPath":"",
  53. // 将映射的本地计算机上的路径
  54. "containerPath":"",
  55. //容器对映射路径具有的权限
  56. "permissions":"ro | rw",
  57. ]]
  58. },
  59. "node": {
  60. // 指定pagecakge.jons文件
  61. "package":"",
  62. // 是否允许容器调试
  63. "enableDebugging":false,
  64. // 意思和 inspect inspect-brk 一样
  65. "inspectMode":"default | break",
  66. // 指定容器调试端口
  67. "inspectPort": 9229
  68. },

自定义docker插件内置的操作命令

文档

launch.json配置

  1. {
  2. "name": "Docker Node.js Launch",
  3. "type": "docker",
  4. "request": "launch",
  5. "preLaunchTask": "docker-run: debug",
  6. "platform": "node",
  7. "removeContainerAfterDebug": true,
  8. // 调试容器的名字,一般不用指定,不知系统怎么设置的,文档上没说
  9. "containerName": "expressdockername-dev",
  10. "dockerServerReadyAction": {
  11. // 指定链接打开方式:外部浏览器 还是 debug for chrom 插件
  12. "action": "openExternally | debugWithChrome",
  13. // 匹配应用启动后输出的日志
  14. "pattern": "listening on port ([0-9]+)",
  15. // 打开链接的地址,可以使用pattern匹配的参数
  16. "uriFormat": "http://localhost:%s",
  17. // 传给debugger for chrome 插件的参数
  18. "webRoot": "${workspaceFolder}"
  19. },
  20. "node": {
  21. // 指定调试端口
  22. "port": 9229,
  23. // 指定调试地址
  24. "address": "localhost",
  25. "sourceMaps": true | false,
  26. // 用于定位生成的JavaScript文件的glob模式数组。
  27. "outFiles": [],
  28. "autoAttachChildProcesses": true | false,
  29. "timeout": 1000,
  30. // 程序启动时立即停止
  31. "stopOnEntry": true | false,
  32. "localRoot": "The root workspace folder",
  33. "remoteRoot": "/usr/src/app",
  34. // 尝试自动跳过未映射到源文件的代码
  35. "smartStep": true | false,
  36. // 自动跳过这些glob模式覆盖的文件。
  37. "skipFiles": [],
  38. // 启用诊断输出
  39. "trace": true | false
  40. }
  41. }

配置案例

  1. FROM node:10-alpine
  2. WORKDIR /usr/src/app
  3. COPY package*.json ./
  4. RUN npm install
  5. COPY . .
  6. CMD [ "npm", "start" ]
  1. docker run --rm -d -p 3000:3000 -p 9229:9229 \
  2. -v ${PWD}:/usr/src/app \
  3. -v /usr/src/app/node_modules \
  4. example:latest

参考

nodejs / docker-node
How to debug Node.js in a Docker container
Customize the Docker extension
Debug Node.js within a container
Debug containerized apps