VS Code Remote Container找不到docker命令,该如何配置?
问题根本原因
你当前是在VS Code远程容器扩展启动的Dev Container内部执行make run命令,该命令需要调用docker服务:默认Dev Container内部没有预装docker客户端,也没有关联宿主机的docker服务,因此会出现docker: not found报错,PATH差异也是因为容器内默认没有docker相关执行文件路径导致的。
如何在VS Code内正确执行构建/make run命令
有两种可行方案:
- 方案1(最简操作):直接在本地Ubuntu终端执行
make build、make run命令,本地docker环境正常可以直接完成容器构建启动。容器启动后再打开VS Code远程容器扩展,选择「附加到正在运行的容器」,选中启动的rggnet-experiment容器即可进入调试,不需要在容器内部执行make相关命令。 - 方案2(容器内执行docker命令):修改Dev Container配置文件
.devcontainer/devcontainer.json,增加如下配置:- 挂载宿主机docker套接字到容器,在
mounts配置项中添加:"source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" - 配置容器内预装docker客户端,在
postCreateCommand中添加:apt update && apt install -y docker.io - 如有PATH不一致问题,可手动添加环境变量配置:
"remoteEnv": {"PATH": "${localEnv:PATH}:/usr/bin"}
修改完成后重建Dev Container即可在容器内部正常执行docker相关命令。
- 挂载宿主机docker套接字到容器,在
更优的容器调试方案
推荐直接用VS Code Dev Container原生配置替代手动执行Makefile启动容器:
- 将Makefile中
docker run的所有参数(GPU配置、挂载卷、环境变量、网络模式、权限配置等)全部写入devcontainer.json对应配置项,远程容器扩展启动时会自动应用所有配置,无需手动执行make run。 - 代码调试直接使用VS Code对应语言的调试插件,可直接在容器内设置断点、单步执行,代码修改会实时同步到容器内部,不需要反复重新构建镜像。
不安装远程扩展能否完成容器调试
可以,有两种替代方案:
- 方案1:本地安装对应开发语言的调试器,启动容器时暴露调试端口,同时将容器内的代码目录挂载到本地,VS Code添加远程调试配置,连接容器暴露的调试端口即可完成调试。
- 方案2:在容器的Dockerfile中添加ssh服务安装、启动、账号配置步骤,容器启动时映射ssh端口,本地VS Code用远程SSH功能连接容器的ssh端口即可,不需要安装远程容器扩展。
内容的提问来源于stack exchange,提问作者Tuan Phuoc Truong
相关产品推荐
相关产品推荐

