vscode开发配置
docker-build 任务
{"type": "docker-build","label": "docker-build","platform": "node","dockerBuild": {// 默认是package.json所在目录的Dockerfile"dockerfile": "${workspaceFolder}/Dockerfile",// 默认是package.json所在的目录"context": "${workspaceFolder}",// 默认是package.json的name字段,或者package.json所在的目录的目录名"tag": "",// 构建参数"buildArgs": "",// 设置lables,默认如下"labels": {"com.microsoft.created-by": "visual-studio-code"},// 设置创建的容器名, 默认是{tag}-dev"target": ""// 在构建前是否更新所依赖的镜像"pull": true,},node: {// 指定pagecakge.jons文件"package": "package.json}"},
docker-run 任务
{"type": "docker-run","label": "docker-run: debug","dependsOn": ["docker-build"],"dockerRun": {// 指定创建容器的镜像名字"image":"",// 指定容器启动后,运行的命令"command":"",// 指定容器名字"containerName":"",// 设置环境变量"env": {"DEBUG": "*","NODE_ENV": "development"},// 指定环境变量文件列表"envFiles": ".env",// 设置lables,默认如下"labels": {"com.microsoft.created-by": "visual-studio-code"},// 指定network"network":"",// 指定networkAlias"networkAlias":"",// 指定os"os":"",// 指定本地机与容器的端口映射,"ports":[{// 指定容器绑定的端口"containerPort":"",// 指定主机绑定的端口,默认是有docker自动选择"hostPort":"",// 指定os"protocol":"tcp | udp",}],// 是否将EXPOSE的端口全部映射到本地机的随机端口"portsPublishAll": true | false ,// 指定extraHosts"extraHosts":[{// DNS解析的主机名"hostname":"",//与上述主机名关联的IP地址"ip":"",]],// 指定volumes"volumes":[{// 将映射的本地计算机上的路径"localPath":"",// 将映射的本地计算机上的路径"containerPath":"",//容器对映射路径具有的权限"permissions":"ro | rw",]]},"node": {// 指定pagecakge.jons文件"package":"",// 是否允许容器调试"enableDebugging":false,// 意思和 inspect 与 inspect-brk 一样"inspectMode":"default | break",// 指定容器调试端口"inspectPort": 9229},
自定义docker插件内置的操作命令
launch.json配置
{"name": "Docker Node.js Launch","type": "docker","request": "launch","preLaunchTask": "docker-run: debug","platform": "node","removeContainerAfterDebug": true,// 调试容器的名字,一般不用指定,不知系统怎么设置的,文档上没说"containerName": "expressdockername-dev","dockerServerReadyAction": {// 指定链接打开方式:外部浏览器 还是 debug for chrom 插件"action": "openExternally | debugWithChrome",// 匹配应用启动后输出的日志"pattern": "listening on port ([0-9]+)",// 打开链接的地址,可以使用pattern匹配的参数"uriFormat": "http://localhost:%s",// 传给debugger for chrome 插件的参数"webRoot": "${workspaceFolder}"},"node": {// 指定调试端口"port": 9229,// 指定调试地址"address": "localhost","sourceMaps": true | false,// 用于定位生成的JavaScript文件的glob模式数组。"outFiles": [],"autoAttachChildProcesses": true | false,"timeout": 1000,// 程序启动时立即停止"stopOnEntry": true | false,"localRoot": "The root workspace folder","remoteRoot": "/usr/src/app",// 尝试自动跳过未映射到源文件的代码"smartStep": true | false,// 自动跳过这些glob模式覆盖的文件。"skipFiles": [],// 启用诊断输出"trace": true | false}}
配置案例
FROM node:10-alpineWORKDIR /usr/src/appCOPY package*.json ./RUN npm installCOPY . .CMD [ "npm", "start" ]
docker run --rm -d -p 3000:3000 -p 9229:9229 \-v ${PWD}:/usr/src/app \-v /usr/src/app/node_modules \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
