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-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
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