我正在尝试在Docker容器中运行Neovim。
我遇到的一个问题是容器中文件的路径与主机文件系统上的路径不同。
示例:
如果我要通过在路径/etc/passwd
中传递Vim容器来编辑/etc/password
,则会编辑容器中的文件而不是主机上的文件。相反,我将必须传递类似/host-shared-dir/etc/passwd
的内容,并使用docker run -v /:/host-shared-dir ...
运行容器。
如何重新映射Vim中的所有路径以将另一个目录视为根目录。
示例:
如果我将路径/etc/passwd
传递给Vim,如何使Vim实际打开文件/host-shared-dir/etc/passwd
?
答案 0 :(得分:1)
您可以使用:autocmd
将所有新打开的缓冲区(:help BufRead
)重定向到以root开头的文件系统路径:
autocmd BufRead * execute 'edit' fnameescape('/host-shared-dir' . expand('%:p'))
请注意,这只是一个简单的演示;您可能希望清理现有的原始缓冲区,仅对某些路径执行此操作,处理文件类型检测等。有关更完整的实现,可以查看file-line plugin;。它实现了类似的功能。
答案 1 :(得分:0)
以特权启动容器并挂载主机卷“ /”
docker container run -t -d --privileged -v "/":"/host/" ubuntu
输入容器
docker container exec -it <container id> bash
然后chroot托管
chroot host
我们现在可以访问具有相同主机路径的所有系统文件。