期望的行为
通过 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