在WSL上的IntelliJ IDEA中配置Dev Container实现Docker Out of Docker时,工作区目录挂载失败的问题求助
大家好,我最近碰到了一个Dev Container配置的棘手问题,折腾了好一阵没搞定,想请教下有没有朋友有解决方案:
场景背景
我在WSL Ubuntu环境里维护一个项目,平时用IntelliJ IDEA打开开发。最近想把项目转到Dev Container里跑,同时要实现Docker Out of Docker的效果——也就是把宿主WSL的/var/run/docker.sock挂载到容器里,这样就能在Dev Container内部直接调用宿主的Docker服务,甚至用docker-compose重新创建外部依赖容器。
遇到的具体问题
我按照Docker Out of Docker的官方配置建议,在devcontainer.json里加了工作区挂载和相关配置:
{ "workspaceFolder": "${localWorkspaceFolder}", "workspaceMount": "source=${localWorkspaceFolder},target=${localWorkspaceFolder},type=bind", "onCreateCommand": "pwd", "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind,consistency=cached" ] }
结果容器启动直接失败,日志里报了两个关键错误:
OCI runtime exec failed: exec failed: unable to start container process: chdir to cwd ("/wsl.localhost/Ubuntu/path/to/my/project") set in config.json failed: no such file or directory
为了调试我加了onCreateCommand: "pwd",又得到另一个错误:
Lifecycle script command: 'pwd' is failed with exit code: 127
我排查到的细节
后来我发现问题根源在localWorkspaceFolder这个变量的解析上——它被IntelliJ/Dev Container插件解析成了完整的WSL外部访问路径/wsl.localhost/Ubuntu/path/to/my/project,而不是WSL内部的项目路径/path/to/my/project。容器内部根本不存在/wsl.localhost这个目录,自然会报错找不到工作区。
我搜了一些相关的问题案例,但目前还没找到可行的解决办法。另外Docker Socket的挂载是正常的,核心卡壳点就在于工作区目录的路径不匹配。
我的核心需求
想请教下:怎么正确配置Dev Container的工作区挂载,让容器能正确识别并进入我的WSL项目目录?或者有没有办法调整localWorkspaceFolder的解析规则,让它只返回WSL内部的相对路径?希望解决这个问题的同时,不影响Docker Out of Docker的功能正常使用。




