解决了

解决了

期望的行为

通过 ssh 连接时,“pip”(和其他工具)应该可用,就像在“普通”终端中一样。

此外,正常终端会话中存在的所有环境变量都应该在 ssh 会话(或通过 ssh 打开的 shell)中可用。

当前行为

尝试执行“pip”时,通过 ssh 连接时会出现“未找到命令”错误,但在正常终端中执行时该命令可以正常工作。

设置

ssh 守护进程在基于镜像的 docker 容器中运行nvcr.io/nvidia/pytorch:20.08-py3。它公开为端口 30022。

使用所有可用工具和设置的环境变量,以交互式终端形式打开/bin/bash容器即可正常工作。容器内的用户是默认 (root) 用户 - 通过 ssh 连接时也是如此。

ssh 连接是使用 rsa 密钥对完成的,其中公钥已添加到容器中/root/.ssh/authorized_keys

尝试过的事情

正在连接ssh -p 30022 root@localhost,或者ssh -p 30022 root@localhost -t "bash -l"没有提供具有所需行为的外壳。

在 ssh 会话中执行su -没有帮助。

在 ssh 会话中执行此操作source /root/.bashrc也无帮助。

答案1

解决了

解决方案基于https://stackoverflow.com/questions/34630571/docker-env-variables-not-set-while-log-via-shell

对于遇到同样问题的人:

这个问题是 docker 特有的。环境变量是在 nvidia 图像构建的 Dockerfile 中设置的。为了在 ssh 会话中恢复环境变量,我将其添加到RUN env > /etc/environment使用 nvidia 图像作为基础的 Dockerfile 中。

该文件被读取并用于填充 ssh 会话中的环境,这也解决了调用或其他工具$PATH时导致“找不到命令”错误的缺失条目。pip

相关内容