c++ - 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扩展并不是完全为此而设计的,但它的功能可能会完成这项工作。我还没有测试过。
解决方案
推荐阅读
- binary-tree - 二叉堆而不是二叉搜索树
- salesforce - 需要将值与 SFDC 中选择列表数据类型的自定义字段进行比较
- python - 熊猫:指数加权*滚动*相关性?
- python - 由另一个数据帧子集一个数据帧
- asp.net-core - Aurelia 授权 ASPNET Core
- python - Python:将值从更新的值附加到现有电子表格
- machine-learning - vgg16 微调狗猫在测试数据上失败
- vba - 仅通过双击特定范围更改单元格的颜色-VBA
- java - 如何从仅选中的多个复选框中获取单个字符串值
- jquery - 如何使用 HTML Select 创建语言选择器,其中选项值具有特定语言页面的 HREF?