使用VSCode远程连接Docker容器时,“code”命令无效

8
我在本地PC上使用VSCode,并通过VSCode的扩展程序Remote - SSHRemote - containers连接到远程服务器上的Docker容器。但是,当我键入时:
$ code <file name>

在VSCode的终端(Bash)上,我收到一个错误信息,内容是:
bash: code: command not found

我无法在VSCode编辑器上编辑该文件。

如果我从VSCode的资源管理器中点击该文件(Ctrl+Shift+E),编辑界面将会出现,但是能否使用code命令来调用它呢?

另外,我打开命令面板 (Ctrl+Shift+P),然后搜索Shell Command: Install 'code' command in PATH,但没有找到相应的命令。

执行环境如下:

  • 本地电脑:Windows 10 Pro
  • 远程主机电脑:Ubuntu 18.04.3 LTS
  • 远程主机PC中的Docker容器:Ubuntu 18.04.3 LTS

非常感谢您的答复。

6个回答

6

针对@davetapley创建的问题,他们在此处发布了一个简单的解决方案

转到VSCode设置,搜索“terminal integrated inherit env”,并启用这个选项。下次打开终端时,code命令将可用。

(本来应该是一条评论,但我还没有这个权限!)


这正是我一直在寻找的。我想让远程服务器上的一些文件在代码中打开,但像 code ~/.bashrc 这样的命令却无法工作。但更新设置可以解决问题! - Mohit Motwani

5

我自己来回答,因为我能够在远程容器中使用code命令调用VSCode。

当我仔细查看home目录下方时,我发现以下目录中有一个code

$HOME/.vscode-server/bin/<directory with a hash-like name>/bin/

那么我将路径通过它传递,然后它就起作用了。

顺便提一下,<directory with a hash-like name>是一个带有类似哈希的名称的目录,在远程连接到容器时会随机分配。它每次都不同,所以请自己参考它。

注册路径的方法如下。

export PATH="$PATH:$HOME/.vscode-server/bin/<directory with a hash-like name>/bin/"

非常感谢您的支持。

你找到了一个实例,它开始正常工作了吗?我没有看到相关的错误。 - davetapley
报告 https://github.com/microsoft/vscode/issues/122751 - davetapley
1
不,<hex-hash>并不是完全随机的,实际上它是发布版本的提交哈希值,并且可以在product.json文件中找到。 - not2qubit

1
这是一个类似问题的解决方法,当在我的Linux系统上通过VSCode的Remote - SSH扩展连接到我的Windows PC时,code命令未按预期工作: 通过编辑我Linux远程系统中的~/.bashrc文件将VS Code添加到PATH中。我使用了akki's answer中的路径变量和this answer by oadams中详细的步骤。为了在我的系统中编辑此文件,我使用nano: nano ~/.bashrc 在文件末尾添加akki提到的导出路径语句,只需去掉引号:export PATH=$PATH:$HOME/.vscode-server/bin/<directory with a hash-like name>/bin/ 然而,当我通过SSH远程连接到我的Raspberry Pi时,code中提到的哈希标签名称并没有改变,所以我不确定如何解决这个问题的一部分。

我的执行环境如下:

  • 本地电脑:戴尔Latitude PC上的Windows 10。
  • 远程主机PC:树莓派3B上的Raspbian GNU/Linux 10 (buster)。

非常感谢您的评论。如果您无法在远程主机PC上连接到docker容器,则似乎不会创建新名称文件夹。@Des_Awung没有使用容器,所以您可能没有遇到这个问题。如果旧名称文件夹仍然存在,我将在主机PC上运行以下命令并每次将其删除以便能够SSH到主机PC。 rm -r ~/.vscode-server/bin/*`` rm ~/.vscode-server/.*log - akki
然而,容器中类似于标签的名称并不会像主机PC那样更改,所以我提出的问题是没有根据的。我会修正我的答案。谢谢您的慷慨评论。 - akki
当你更新 VS Code 时会发生什么? - undefined

0
从@akki的答案中派生而来,我注意到哈希值存储在几个环境变量中。因此,我将其添加到我的.zshrc中,它简单地查找bin的路径,然后创建一个别名。
VSCODE_SSH_BIN=$(echo "$BROWSER" | sed -e 's/\/helpers\/browser.sh//g')
alias code='$VSCODE_SSH_BIN/remote-cli/code'

只有当我使用 VS Code 中的终端访问 ssh 时,$BROWSER 才会为我设置。使用另一个终端对我来说不起作用。 - Vinggui
也许可以通过扫描文件系统来获取路径。然后,如果BROWSER变量不存在,它会尝试通过分析来找到它。唯一的问题是,如果您打开了多个通过ssh连接到同一主机的代码窗口,则可能无法区分它们。 - Trevin Avery

0

听起来你可能混淆了你正在编写code命令的位置。你的Visual Studio Code安装在本地机器上,而不是Docker容器内部。当你在Docker容器内打开终端时,就好像它是完全不同的一台机器。这里是一个链接,指向有趣且有用的VSCode文档。


非常感谢您的评论。 我知道纯VSCode只安装在我的本地机器上,而不是远程机器上。当我通过VSCode连接到远程机器时,“~/.vscode-server/”目录会在远程机器上生成。.vscode-server可能会让我产生纯VSCode已经安装在远程机器上的错觉。我使用这个方法来临时调用docker容器内部的终端code - akki

0
当使用vscode服务器连接到Docker容器时,code命令将无法工作,因为$HOME/.vscode-server/目录尚未创建。另一种选择是使用code-server命令。它将在vscode编辑器中打开文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接