VS代码远程开发:容器postCreateCommand无法运行

时间:2019-08-12 13:26:48

标签: visual-studio-code vscode-remote

我正在尝试为远程开发工作区配置SSH身份验证,如documentation中所述:

{
  "dockerfile": "Dockerfile",
  "runArgs": [
    // ...
    "-v",
    "${env:HOME}${env:USERPROFILE}/.ssh:/root/.ssh-localhost:ro"
  ],
  "postCreateCommand": "echo \"copying ssh keys...\" && mkdir -p ~/.ssh && cp -r ~/.ssh-localhost/* ~/.ssh && chmod 700 ~/.ssh && chmod 600 ~/.ssh/*",
  extensions: [
    // ...
  ]
}

请注意,我已经在该行的开头添加了一个echo语句,只是为了确保我知道它是否可以运行。除此之外,它与文档相同。

但是,看来postCreateCommand从未运行过。如果查看Dev Containers终端的输出,我的docker exec语句的预期copying ssh keys...命令和echo的输出都看不到,而容器内部的ls -a /root则没有显示{ {1}}文件夹,但没有.ssh-localhost文件夹。

我在日志中也没有看到错误消息。我尝试触发“远程开发:重建容器”,以及在重新加载窗口之前删除容器和图像,但是无论如何都会得到相同的结果。

我在这里缺少什么配置?

1 个答案:

答案 0 :(得分:0)

已经有一段时间了,所以我不能100%地确定这是我的问题,但是与此同时,我正在努力使该配置启动并运行,我还尝试通过安装一个命名为~/.vscode-server的卷。

对于这种特定用例,这似乎是一个“坏”主意,因为postCreateCommand是否应该运行取决于该目录中是否存在标记文件(以及一两个级别)在文件树下)。因此,当我重新构建容器并重新启动“ VS Code”窗口时,该卷已重新安装到新容器中,并且标记文件已经存在,因此该命令未运行。

我发现,针对此问题的更好解决方案是将以下内容添加到您的Dockerfile中,而不要使用postCreateCommand

RUN echo "\n\nif [ -d ~/.bashrc.d ]; then\n  for rc in ~/.bashrc.d/*rc; do\n    . \$rc\n  done\nfi\n" >> $HOME/.bashrc

其中$HOME/root还是/home/$USER,具体取决于您是否以root用户身份运行容器。

然后,使您可以将目录批量安装到~/.bashrc.d位置,并且该目录中与*rc匹配的每个文件都将作为配置文件脚本的一部分运行。可以将上面的SSH设置脚本放在一个sshrc文件中,而用if [[ -d ~/.ssh ]]包围,以避免每次都运行它。