如何为已附加的VSCode容器在镜像外配置层级创建settings.json与extensions.json
解决方案
方案一:使用ddev内置devcontainer集成(最推荐)
这是最符合官方规范的实现方式,完全满足你将配置存放在项目目录的需求:
- 进入WSL侧的ddev项目根目录,执行命令:
ddev config --devcontainer-enabled=true - 执行
ddev start启动环境后,ddev会自动在项目根目录生成.devcontainer文件夹,其中的devcontainer.json已经默认适配ddev web容器的运行配置 - 你可以直接在
devcontainer.json的extensions字段里添加需要自动安装的扩展ID,settings字段添加容器级别的VSCode配置 - 后续直接在项目目录执行
code .,VSCode会自动检测到devcontainer配置,提示「在容器中重新打开」,确认后会自动连接到web容器,同时完成扩展安装和配置加载,所有配置都会被识别为devcontainer配置而非工作区配置。
方案二:保留现有ddev code附加逻辑的实现方法
如果你不想改变现有ddev code的使用习惯,可以选择以下两种子方案:
子方案1:附加时指定devcontainer配置路径
调整你的ddev code命令生成的启动参数,在调用code命令时指定本地项目的devcontainer配置路径,修改后的命令参考:
code --folder-uri="vscode-remote://attached-container+<你的web容器十六进制标识>/var/www/html" --remote-containers.devcontainer-path=${PWD}/.devcontainer/devcontainer.json
VSCode附加容器时会自动读取你项目目录下的devcontainer配置,自动完成扩展安装和配置应用。
子方案2:通过ddev钩子预配置容器环境
你可以通过ddev的post-start钩子,在容器启动时直接把扩展和配置预置到容器内的VSCode服务器目录中,不需要修改附加命令:
- 打开项目下的
.ddev/config.yaml,添加以下钩子配置:
hooks: post-start: - exec: | # 创建VSCode服务器配置目录 mkdir -p ~/.vscode-server/data/Machine # 写入容器级VSCode配置 cat > ~/.vscode-server/data/Machine/settings.json << 'EOF' { "php.suggest.basic": false, "editor.tabSize": 2, // 你需要的其他配置 } EOF # 预安装指定扩展 for ext in "bmewburn.vscode-intelephense-client" "dbaeumer.vscode-eslint" "EditorConfig.EditorConfig"; do code --install-extension $ext --no-sandbox --user-data-dir ~/.vscode-server >/dev/null 2>&1 || true done
- 重新执行
ddev restart生效,后续每次容器启动都会自动预置配置和扩展,你用原来的ddev code命令附加后直接就能用。
之前你在容器内执行
code --install-extension报错是因为缺少运行参数,加上--no-sandbox和--user-data-dir指定VSCode服务器目录就可以正常执行。
内容的提问来源于stack exchange,提问作者Grevil
相关产品推荐
相关产品推荐

