如何用vscode进行Docker容器开发_编写Dockerfile与调试技巧【教程】
发布时间 - 2026-01-28 00:00:00 点击率:次VS Code写Dockerfile需注意基础镜像匹配、WORKDIR/COPY路径一致、用-slim/-alpine镜像减体积;devcontainer.json实现容器内开发;.dockerignore避免构建上下文过大;调试需配准端口、监听地址及信号。
VS Code 打开项目后直接写 Dockerfile 就行,但得注意基础镜像和工作路径
VS Code 本身不强制要求任何插件来写 Dockerfile,但装上 Docker 官方插件(Microsoft 提供)能获得语法高亮、指令提示和构建命令快捷按钮。写的时候最常踩的坑是:FROM 选错基础镜像(比如用 node:18-slim 却在容器里跑 Python 脚本),或 WORKDIR 和 COPY 路径不匹配导致构建时报 no such file or directory。
-
FROM尽量用带-slim或-alpine的镜像,减小体积;调试阶段可临时换-bullseye或完整版方便装调试工具 -
COPY . /app前确保当前目录有package.json或requirements.txt,否则RUN npm install会失败 - 别在
Dockerfile里写EXPOSE 3000就以为端口通了——这只是声明,实际还得靠docker run -p 3000:3000映射
用 devcontainer.json 在容器里开 VS Code,不是“连进运行中的容器”
很多人以为“Docker 容器开发”就是先 docker run,再用 VS Code 的 Remote-Containers 插件连进去。其实标准流程是:在项目根目录建 .devcontainer/ 文件夹,放 devcontainer.json,然后按 Ctrl+Shift+P → Dev Containers: Reopen in Container。VS Code 会自动基于配置拉镜像、挂载代码、安装扩展、启动容器——你编辑的文件实时同步,终端也直接跑在容器内。
-
devcontainer.json中的image或dockerfile字段必须指向有效镜像或本地Dockerfile,否则重建失败 -
mounts字段慎用,比如挂载/var/run/docker.sock是为了在容器里执行docker命令,但会带来权限和安全风险 - 如果容器启动后没反应,看 VS Code 右下角状态栏是否显示 “Dev Container” —— 没显示说明配置没生效,常见原因是
.devcontainer不在项目根目录
docker build 报错时,优先查缓存和上下文路径
VS Code 集成终端里执行 docker build -t myapp . 失败,90% 不是语法问题,而是构建上下文(.)里混进了大文件(如 node_modules、__pycache__)或忽略了 .dockerignore。Docker 默认把当前目录所有文件打包发给 daemon,既慢又容易触发 ERROR: failed to solve: failed to compute cache key。
- 务必加
.dockerignore,内容至少包括:node_modules、.git、.DS_Store、*.log - 用
docker build --no-cache排查是否因缓存导致行为异常,但别长期依赖它——缓存本该提效 - 如果报
The command '/bin/sh -c npm install' returned a non-zero code: 1,进容器手动跑一遍命令更直观:docker run --rm -v $(pwd):/src -w /src node:18 sh -c "npm install"
调试 Node/Python 服务时,别只改 ENTRYPOINT,得配好端口和信号
想在容器里断点调试,光靠 docker run -it -p 9229:9229 不够。Node.js 需要启动时加 --inspect=0.0.0.0:9229,Python(用 debugpy)则需监听 0.0.0.0:5678 并允许外部连接。VS Code 的 launch.json 必须和容器内的监听地址、端口、协议严格一致。
- Node 示例:
ENTRYPOINT ["node", "--inspect=0.0.0.0:9229", "index.js"],且docker run要加-p 9229:9229 - Python 示例:先
RUN pip install,再
debugpy
ENTRYPOINT ["python", "-m", "debugpy", "--listen", "0.0.0.0:5678", "--wait-for-client", "app.py"] - VS Code 的
launch.json中port填宿主机端口(如9229),address填localhost,不是容器 IP - 别用
docker stop杀调试中的容器——它发SIGTERM,可能跳过断点;用docker kill -s SIGINT更接近 Ctrl+C 行为
真正卡住的地方往往不是语法或命令,而是路径挂载是否生效、端口是否被宿主机其他进程占了、或是 devcontainer.json 里漏写了 forwardPorts 导致浏览器打不开 localhost 页面。
# python
# vscode
# js
# node.js
# git
# json
# node
# docker
# npm
# 浏览器
# app
# 端口
# pip
# for
# Directory
# Error
# var
# copy
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python高阶函数应用_函数作为参数说明【指导】
JavaScript数据类型有哪些_如何准确判断一个变量的类型
EditPlus中的正则表达式 实战(1)
Laravel如何配置和使用缓存?(Redis代码示例)
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
网站制作报价单模板图片,小松挖机官方网站报价?
如何快速选择适合个人网站的云服务器配置?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Windows Hello人脸识别突然无法使用
利用JavaScript实现拖拽改变元素大小
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何挑选高效建站主机与优质域名?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
昵图网官网入口 昵图网素材平台官方入口
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
,南京靠谱的征婚网站?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何在万网ECS上快速搭建专属网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
如何在IIS中新建站点并配置端口与物理路径?
使用Dockerfile构建java web环境
高防服务器租用如何选择配置与防御等级?
微信小程序 配置文件详细介绍
如何快速查询域名建站关键信息?
Linux后台任务运行方法_nohup与&使用技巧【技巧】
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在阿里云通过域名搭建网站?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
如何打造高效商业网站?建站目的决定转化率
如何快速生成橙子建站落地页链接?
Laravel如何使用Sanctum进行API认证?(SPA实战)
高防服务器:AI智能防御DDoS攻击与数据安全保障
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何在IIS服务器上快速部署高效网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?


