如何在调用 "Reopen in container" 时打开 VS 代码 "in container" 而不会自行重启并丢失 shell 设置?

How can I open VS code "in container" without it restarting itself and losing shell settings when "Reopen in container" is invoked?

我有一个开发用例,我使用脚本在 docker 机器或其他环境中配置 shell,然后打开一个包含源和设置的目录 (/.vscode/, .devcontainer/) 我可以在 VS code Remote Containers 扩展中 edit/build/debug。

简而言之,我希望在 "start-development.sh" script/hook 运行s:

时实现 following sequence
  1. 设置主机端 env 或远程资源(反向 sshfs 以将源安装到远程 docker-机器、modprobe、docker buildx、用于 x-passthrough 的 xhost 等)
  2. 运行 VS Code 因为 shell 所以设置不会被丢弃 指定目录(可以通过 sshfs 或其他方式安装)在容器中,而不仅仅是在主机上打开
  3. 运行 清理脚本 and/or 在开发容器停止时(通过关闭 VS Code 或重建容器)销毁实际资源(卸载、modprobe -r 等) ).

请参阅 this 脚本,了解通过 docker-machine 使用 AWS 实例自动配置 shell 的简单示例。我将在未来几天向该存储库添加更多示例。

在该目录 (code -w -n --folder-uri /path/here) 中打开 VS Code 并等待它退出(这样我就可以执行清理步骤,例如关闭远程 docker-机器,不-安装反向 sshfs 安装代码或禁用我用于开发等的内核模块)。

但是,VS 代码当前在 "host mode" 中打开,当我通过 UI 或命令面板选择 "Reopen in container" 或 "Rebuild container" 时,它会终止该进程并打开另一个进程顶级(?)进程,退出 shell 并过早地丢弃我的配置 and/or 运行 清理我的脚本部分,因此它有错误的环境。当它最终在容器中启动时。悲伤。

最后,我的问题是:

有没有办法告诉 VS 代码打开文件夹 "in-container"?这将为我解决很多问题,而不是一个笨拙的开发人员。循环,我必须确保代码实例不会自行重启并搞砸 - 例如,每当我重建容器时。

或者,最好不要退出我完全开始的顶级 code 流程,这样我就可以等待它,或者以我不知道的其他方式监控它防止擦除我的设置和过早 运行 我的清理脚本?

提前致谢!

PS:请在标记为 "not related to development" 之前阅读整个问题。如果想为复杂的本机项目提供零安装开发环境,在设备上运行 development/debugging 或使用具有巨型 GPU 的云实例进行深度学习 Docker,您无需手动管理所有内容并编写对您有吸引力的自述文件页面 - 这与编程非常相关。

整个周末尝试不同的东西后,我终于弄明白了!关键是关于高级容器配置的精彩文章中的 this 部分。

我将其放入 bash 脚本并使用 jqdocker.host 和其他 docker env 设置合并到 .vscode/settings.json 中。请参阅此示例 here

在 运行 生成此文件的脚本之后,用户只需要 reload/relaunch 在该工作区文件夹(创建设置的位置)中进行 VS 代码,是的,一切都按预期进行。

既然我已经掌握了基础知识,我打算添加一些实际示例。不幸的是,我不得不将 createteardown 分开作为单独的 activatedeactivate 钩子。 IMO,工作流程还不错。