从 docker 容器中打开 VS Code

Posted

技术标签:

【中文标题】从 docker 容器中打开 VS Code【英文标题】:Open VS Code from inside a docker container 【发布时间】:2021-05-11 15:25:25 【问题描述】:

是否可以在 docker 容器内运行 code someFile.js,并在 VS Code 中打开它?

我为什么要这样做?因为 vue 开发工具允许您从浏览器中打开 vue 组件。这对于想要快速跟踪组件并在编辑器中打开它们的新开发人员特别有用。

不幸的是 - 由于我的开发服务器在 docker 容器中运行 - 此功能不起作用。这是因为编辑器是从开发服务器中打开的

可能值得注意,我正在使用 Visual Studio Code Remote - Containers。

所以进一步缩小问题范围:

如何允许从 docker 容器启动 VS Code,以便 vue 开发工具可以在我的本地编辑器中打开该文件?

【问题讨论】:

【参考方案1】:

是的,如果您不介意在 docker 容器中运行您的 vue 工具。你必须设置一个.devcontainer.jsonfile specifying the dockerfile or image or dockercompose file to use to build the container。它会默认为你创建容器并自动挂载你的项目目录,但也有很多替代的configuration options。

这意味着您将打开 VS Code,基本上您的整个 IDE 将位于 docker 容器中。您可以从 VS Code 终端调用 vue 工具,包括调用 code

在过去 6 周左右的时间里,我一直在用一些 tensorflow 的东西来做这件事。一开始有点迷茫,但现在我真的很喜欢它。

到目前为止,我遇到的一个挑战是,如果您将映像部署为可交付成果,使用容器作为开发环境可能会导致一些开发工具潜入映像(例如在 Dockerfile 中包含您需要的开发工具正在开发中,但不希望在部署的映像中)。可能有很好的方法来处理这个问题,但我还没有全部探索过。

另一个注意事项:我似乎找不到文档,但我认为推荐的方法是使用 WSL2 支持的 docker,然后将所有 docker 安装和 docker 客户端调用从 WSL2 文件系统执行到 docker 而不是从Windows 到 Docker。我猜如果 WSL2 和 docker 共享同一个虚拟机,WSL2/Docker 之间的挂载文件系统比 Windows/Docker 更快。到目前为止,这对我来说效果很好......

【讨论】:

我认为 these Docker docs 和 these Microsoft docs 讨论了您提到的 WSL2 绑定安装性能优势。【参考方案2】:

我已经设法使这个 VS Code 的 docker 化版本适应我们的限制性运行时环境 (Openshift),尽管它确实假设连接到 Internet,因此必须预先安装扩展和 Intellisense ML 模型:

https://hub.docker.com/r/codercom/code-server

【讨论】:

以上是关于从 docker 容器中打开 VS Code的主要内容,如果未能解决你的问题,请参考以下文章

VS Code 没有为在 Docker 容器中运行的 Node 应用程序打断点

在 Docker 容器内开发时启用 VS Code IntelliSense

VS Code romote远程开发

如何在 Docker 容器中运行 VS Code 的扩展开发主机来测试我的 vscode 扩展?

vs code使用docker调试程序

从 Windows 资源管理器中打开 VS Code 中的文件夹