我想在主机上运行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工具扩展,这样,当我运行Cmake Configure
(在运行于主机上的VSCode中)时,它实际上将在内部运行cmake命令 Docker容器,而不是从我的主机上使用安装在Docker中的cmake。
临时解决方案:通过X / VNC转发显示
因此,在Docker中安装VSCode,在Docker中运行x / vnc服务器,公开端口并从主机连接到它。
是的,有可能,我在这里运行它。但是它有许多限制和问题,其中最痛苦的是滞后/延迟。 一般来说,这是一个糟糕的解决方案,因此我会强烈建议避免这种情况。
我可以考虑的另一种解决方案:
VSCode实例在docker内部作为服务器运行。 主机上的VSCode实例连接到服务器实例。 您可以在主机VSCode中完成所有工作,但是只要您运行命令,该命令就会由服务器实例执行,该服务器实例将在Docker内部运行所有内容。 我想这将需要VSCode(或可能是扩展)的支持。 VSCode Live Share扩展名不完全是为此而创建的,但是它的功能可能会起作用。我还没有测试。