visual-studio-code - VS Code 远程开发:容器 postCreateCommand 不运行
问题描述
我正在尝试为远程开发工作区配置 SSH 身份验证,如文档中所述:
{
"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
.ssh-localhost
.ssh
我在日志中也没有看到错误消息。我已经尝试触发“远程开发:重建容器”以及在重新加载窗口之前删除容器和图像,但无论如何都会得到相同的结果。
我在这里缺少什么配置?
解决方案
已经有一段时间了,所以我不能 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
where$HOME
或者取决于您是否以 root 身份运行容器/root
。/home/$USER
然后,这允许您将目录卷挂载到该~/.bashrc.d
位置,并且该目录中匹配*rc
的每个文件都将作为配置文件脚本的一部分运行。上面的 SSH 设置脚本可以放在一个sshrc
文件中,而不是被包围if [[ -d ~/.ssh ]]
以避免每次都运行它。
推荐阅读
- javascript - 使用 JQuery 在 Word Web 插件中选择文本
- apache-nifi - 流文件的颠簸转换
- chart.js - Chartjs - 具有多级 x 轴的条形图的数据格式
- c# - Ajax.BeginForm 使用不同的提交按钮和不同的提交方式
- caddy - 指定 Caddy 监听端口
- selenium - Selenium webdriver 切换选项卡
- matlab - 有没有办法在 MATLAB 中安全地修改 mex 文件?
- intellij-idea - 文件关闭后如何保存折叠的代码结构
- node.js - MongoDB cursor.each 方法返回一个最终的空值
- magento2 - 我们如何使用自定义属性获取产品信息?