我的目标
我已经将devcontainers与WSL2结合使用了一段时间。但我不断遇到问题,除此之外,我喜欢将笔记本电脑的资源卸载到服务器上。将容器移动到本机Linux服务器将解决我的问题。
我的理想情况是有一个解决方案,它的工作原理就像在我的Windows笔记本电脑上本地工作一样(后来可能会转移到Macbook),但使用Linux服务器的设施(它有systemd和netns),并将工作负载转移到那里,这样我的笔记本电脑听起来就不像吸尘器了。
我的旅程
我正在尝试按此处所述设置远程容器:https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host
事实上,容器运行良好,我正在使用第二个存储解决方案,这意味着我将以下内容添加到我的.devcontainer.json:
"workspaceMount": "source=/home/marvink/code,target=/workspaces,type=bind,consistency=cached"
我的工作流程目前看起来是这样的:
- 在本地克隆项目(项目中已包含.devcontainer)
- 将上面的workspaceMount添加到devcontainer.json
- 远程克隆项目(例如到/home/marvink/code/new项目)
- 在本地打开项目
- 在容器中生成并重新打开
- 处理远程上的文件
我的问题
这是可行的,但现在我的本地驱动器上有一些文件从未被接触过,这并不理想,但也不是一场灾难,更大的问题是当我想更新devcontainer时。我需要在本地(在一个单独的窗口中)完成这项工作,如果我想将其提交到git,我需要手动将其复制粘贴到远程,当然我有时会忘记这一点,并尝试远程编辑它,这会引起很多挫折(有时它似乎确实使用了远程配置,但这可能是一个错误?)。
这就是为什么我想通过两种方式设置rsync来同步对文件的更改,并且作为奖励,我可以在脱机时在本地编辑文件。在链接中描述了如何手动完成,但我希望它是自动化的,这样我就不会忘记或犯错误。
在Powershell中,我可以运行一个单向同步的rsync命令,我可以将其扩展到双向同步:
wsl rsync -rlptzv --progress --exclude=.git '$PWD' 'marvink@s-dev01:~/code/new-project'
这需要在本地运行,但我找不到方法。例如,我需要在本地运行任务,但在远程工作时不可能这样(https://github.com/microsoft/vscode-remote-release/issues/168)。
另一种方式对我来说似乎不是一个选择,因为我不想暴露我笔记本电脑上的任何端口,防火墙会根据我的位置来阻碍我。
我的问题
我的工作流程似乎仍然有点复杂,所以我愿意接受这方面的建议,但对如何同步我的工作区文件有什么想法吗?
如果将代码存储在远程服务器上,则不需要本地版本的代码(包含.devcontainer
文件夹)。您应该能够使用Remote-ssh扩展在VScode中打开ssh目标,这是您添加的链接中推荐的方法。Remote-Containers扩展"堆叠"在SSH扩展的顶部,因此一旦通过SSH连接,您就可以使用位于远程服务器上的.devcontainer.json
配置连接到容器。
如果您不想在settings.json
文件中使用扩展名并使用bind-mount+specified docker.host,您可以使用同一篇文章中的方法,通过SSHFS、docker-machine或rsync同步代码。