首页 > 解决方案 > VS Code 与 Docker 内的 C++ 开发环境集成

问题描述

我想在我的主机上运行 VSCode,但是(使用它的功能/扩展)从我的 Docker 容器内的 dev-env 中启动工具。

我已经设置了一个 docker 映像作为 C++ 的开发环境。让我们称之为dev-env

它基于 linux,包含所需的库、交叉编译工具链和我们用于构建和测试软件的各种工具(cmake、ninja、cppcheck、clang-tidy 等)

我在主机上有一个 GIT 存储库,我将它安装在 docker 中。所以我通常的工作流程是运行 docker:

host$
host$ docker run -v path/to/my/codebase/on/host:path/inside/docker -h dev-env --rm -it image_name bash
docker#
docker# cd build; cmake ..
 etc...

因此,我可以在 docker 内统一开发环境中构建、测试和运行我的工具。

现在,我们的目标是将其从终端带到 IDE 的世界。我碰巧使用 VS Code。

在主机上,我在 VSCode 中打开我的代码库文件夹。由于它是在 docker 内部映射的,因此我在本地进行的任何更改也将在内部可用dev-env

但是,如果我现在从 VSCode 运行任何东西(CMake 配置、构建等),它当然会从我的主机中调用这些工具——这当然不会起作用,也不是我想要的。

使用中定义的任务,tasks.json我可能可以通过让它们运行类似的东西来管理docker exec CONTAINER my_command

扩展会变得更加复杂:

我想要的是以这样的方式配置例如VSCode CMake Tools扩展,当我运行时Cmake Configure(在我的主机上运行的 VSCode 中),它实际上会Docker 容器中运行 cmake 命令,使用安装在 Docker 中的 cmake ,而不是来自我的主机。

临时解决方案:通过X/VNC转发显示

所以在 Docker 中安装 VSCode,在 Docker 中运行 x/vnc 服务器,暴露端口并从主机连接到它。

是的,有可能,我在这里运行它。但它有很多限制和问题,其中最痛苦的是滞后/延迟。一般来说,这是一个不好的解决方案,所以我会强烈要求避免这种情况。

我可以考虑的另一个解决方案:

VSCode 实例在 docker 内作为服务器运行。连接到服务器实例的主机上的 VSCode 实例。您在主机 VSCode 中完成所有工作,但无论何时运行命令,它都会由一个服务器实例执行,该实例运行 Docker 中的所有内容。我想这需要 VSCode 的支持(或者可能是扩展)。VSCode Live Share扩展并不是完全为此而设计的,但它的功能可能会完成这项工作。我还没有测试过。

标签: c++dockercmakevisual-studio-code

解决方案


推荐阅读