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

标签 docker visual-studio-code vscode-remote

我有一个开发用例,我使用脚本配置带有 docker-machine 或其他环境的 shell,然后打开一个包含源和设置(/.vscode/、.devcontainer/)的目录,我可以编辑/构建/调试在 VS code Remote Containers延期。

简而言之,我希望实现 following sequence当“start-development.sh”脚本/钩子(Hook)运行时:

  • 设置主机端环境或远程资源(反向 sshfs 将源挂载到远程 docker-machine、modprobe、docker buildx、xhost 用于 x-passthrough 等)
  • 运行 VS 代码 在那个外壳中,所以设置不会被丢弃在容器中具有指定目录(可以通过 sshfs 或其他方式挂载),而不仅仅是在主机上打开
  • 当开发容器停止时(通过关闭 VS Code 或重建容器),运行清理脚本以清理和/或销毁真实资源(卸载、modprobe -r 等)。

  • this通过 docker-machine 使用 AWS 实例自动配置 shell 的简单示例的脚本。我将在接下来的一天左右向这个存储库添加更多示例。

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

    但是,VS 代码当前以“主机模式”打开,当我通过 UI 或命令面板选择“在容器中重新打开”或“重建容器”时,它会终止该进程并打开另一个顶级(?)进程,退出 shell & 丢弃我的配置和/或过早地运行脚本的清理部分,因此它有错误的环境。当它最终在容器内启动时。悲伤。

    所以最后,我的问题是:

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

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

    提前致谢!

    PS:请在将其标记为“与开发无关”之前阅读整个问题。如果为复杂的原生项目提供零安装开发环境的想法,使用具有巨大 GPU 的云实例进行实时设备开发/调试或深度学习,您无需手动管理所有内容并编写自述文件页面。对你来说——这非常关乎编程。

    最佳答案

    经过所有周末尝试不同的事情,我终于想通了!关键是this关于高级容器配置的精彩文章中的部分。

    我将其放入 bash 脚本并使用了 jq合并docker.host和其他 docker env设置到 .vscode/settings.json .见这个例子here .

    运行生成此文件的脚本后,用户只需在该工作区文件夹(创 build 置的位置)中重新加载/重新启动 VS 代码,是的,一切都按预期工作。

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

    关于docker - 如何在调用 "in container"时打开 VS 代码 "Reopen in container"而不会重新启动并丢失 shell 设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493171/

    相关文章:

    docker - 'docker inspect -f .'是做什么的?

    docker - 使用 docker-compose 时忽略容器退出

    mongodb - 在 Synology NAS 上通过 docker 启动 mongo

    visual-studio-code - 在 VSCode 上美化 c++ 文件

    c++ - VSCode C/C++ 远程开发 - 语法突出显示颜色不起作用

    javascript - Grunt/Docker 文件路径

    qt - 如何在 Qt/Qmake 中使用 Visual Studio 代码? (苹果系统)

    c++ - VS Code "step into"调试器配置

    visual-studio-code - 如何将 VSCode 连接到 GCP 实例

    visual-studio-code - 是否可以在 VS Code clangd 扩展中指定 libstdc++ 的路径?