如何避免重装VS Code插件
默认情况下,VS Code 会往容器的文件系统安装插件和 VS Code Server。尽管这比挂载本地的文件系统有更好的性能,但缺点是每次容器重建,都必须重装这些插件。如果你发现自己经常重建容器,你可以使用具名卷挂载,这样即便容器重建,插件和 VS Code Server 也不用重装。
这么做,有 2 个副作用:
1、删除容器并不会自动删除具名卷。
2、多容器共享同一个卷,有可能会遇到不可预知的后果,所以出于安全的考虑,我们对每个具名卷都要用唯一的名字。
通过以下步骤来创建具名卷:#
1、如果你是 非 root 用户,需要确保 Dockerfile 会在容器中,创建~/.vscode-server/extensions 和~/.vscode-server-insiders/extensions 文件夹。且要将该 非 root 用户设为文件夹的拥有者。如果不这么做的话,文件夹仍旧被 root 用户所有,由于权限问题会导致连接失败。《往开发容器添加非 root 用户》一文会谈到更多细节,不过你仍旧可以把以下脚本放进 Dockerfile 中,来创建文件夹。记得把 user-name-goes-here 替换成真正的用户名:
2、接着,为容器中的~/.vscode-server/extensions 和~/.vscode-server-insiders/extensions 路径,配置具名卷挂载。配置会根据你在 devcontainer.json 文件中,所引用的是 image,Dockerfile 还是 Docker Compose 而有所不同。
如果你引用的是 Dockerfile 或 image:#
把以下内容添加到 devcontainer.json 文件中,如果你是非 root 用户,把 /root 替换成容器中对应的家目录,比如 /home/user-name-goes-here 。另外,unique-vol-name-here 需要替换成一个唯一的卷名:
如果你引用的是 Docker Compose:#
为相应的服务更新或扩展 docker-compose.yml 文件,加入以下内容。如果你是非 root 用户,把 /root 替换成容器中的家目录,比如 /home/user-name-goes-here 。把 unique-vol-name-here 替换成一个唯一的卷名:
3、最后,为了让修改生效,如果容器构建过,且已连接,在 Command Palette 中运行 Remote-Containers: Rebuild Container 命令;否则,运行 Remote-Containers: Reopen Folder in Container 命令。
容器跑起来之后,后续重建容器,就不需要安装插件和 VS Code Server 了。重建也不会根据 devcontainer.json 中修改过的插件列表而去更新插件。
如果,如果你想完全重置的话,你可以把卷删了,这样重启的时候,所有东西都会重装的。
如果喜欢我的文章,欢迎关注和长按点赞支持。我们下期不见不散。
推荐文章: