容器类应用常见问题¶
使用访问入口¶
对于容器类应用所提交的作业,可能会预留有访问入口以便交互操作,如通过 ssh 连接容器终端,请参考 访问入口使用。
设置网络代理¶
容器作业内如果需要访问互联网,需设置访问代理。可通过以下几种方式进行配置:
通过环境变量¶
我们推荐直接通过设置环境变量的方式来设置网络访问代理,您在需要联网行时加载环境变量脚本即可:
source /app/bin/proxy.sh
小心
环境变量仅在当前 shell 中生效,每次您重新创建一个新的 shell (例如 ssh 登陆),都需要重新加载环境变量。
通过 module¶
如果容器中有 module
命令,您也可以尝试通过 module
命令来加载网络代理。
# 可能需要先加载模组列表
module use /app/ubuntu/modulefiles # ubuntu为基础的镜像
module use /app/centos/modulefiles # centos为基础的镜像
# 加载上网代理
module load proxy
成功加载网络代理后,将能够访问互联网。部分应用可能需要在其配置文件中另行配置,请参阅应用的说明。
小心
建议用户仅在需要设置代理时加载代理设置,并且在使用完代理后,立即取消代理,否则可能会造成 tensorflow 等应用无法正常运行。使用下列命令来取消代理:
module unload proxy
容器内互联网可访问性判断¶
警告
ping
命令不走 HTTP 代理,即使设置网络代理亦无法使用,请勿使用 ping 命令进行测试。
用户登录作业后,若未设置网络代理,默认情况下无法访问互联网。如下:
![../../_images/net_denied.png](../../_images/net_denied.png)
通过 设置网络代理 后才可正常访问互联网。用户可通过以下方式进行判断:
检查网络代理是否设置成功
echo $http_proxy echo $https_proxy
测试能否访问互联网
# 若容器内安装有 curl 可通过 curl 进行测试 curl [url] # 若容器内未安装有 curl,可通过 wget 进行测试 /app/bin/busybox wget [url] -O -
容器内数据上传下载¶
对于运行中的容器作业,平台支持使用常见的 SSH 工具进行数据的上传和下载,推荐使用 WinSCP 工具。
小技巧
若数据量巨大,可在作业运行前使用硬盘挂载的方式进行数据上传和下载(需联系技术支持人员进行硬盘挂载)。
下面是使用 WinSCP 工具进行数据上传和下载示例。
WinSCP 下载地址: WINSCP
WinSCP 传输文件步骤:
在 “作业详情” 界面查看作业的主机名、端口号和用户名信息:
![查看作业信息](../../_images/winscp.png)
打开 WinSCP ,根据步骤 1 的信息填写主机名、端口号和用户名信息,密码使用星光平台的登录密码,输入完成后点击 “登录” 按钮:
![../../_images/6.png](../../_images/6.png)
选择要登录的作业对应的编号,如本例中的作业编号为 1 ,选择完成后点击 “确定” 按钮:
![../../_images/71.png](../../_images/71.png)
进入 WinSCP 的文件传输界面,左侧是本地文件和文件夹,右侧是远程服务器的文件和文件夹:
![../../_images/81.png](../../_images/81.png)
上传文件:选中一个本地文件,右击弹出操作菜单,点击 “上传” 即可上传文件到远程服务器:
![../../_images/91.png](../../_images/91.png)
下载文件:选中一个远程文件,右击弹出操作菜单,点击 “下载” 即可下载文件到本地服务器:
![../../_images/101.png](../../_images/101.png)
如何在容器中安装软件¶
pip 安装用户 python 包¶
用户直接使用 pip
命令进行 python 包的安装时,安装会失败。若要在星光平台进行用户自定义 python 包安装时需要按照以下几个步骤进行:
使用包含有 pip 的镜像环境或加载包含 pip 命令的相关 module
按照 设置网络代理 一节设置好网络代理
带上 user 参数使用 pip 命令,如:
pip install -user xxx
下图演示了使用 pip 安装 scapy 的步骤:
![../../_images/111.png](../../_images/111.png)
从源码安装软件¶
当用户在作业容器中编译安装其他第三方软件时,可以选择编译安装模式。
对于支持编译安装的软件,其官方源码通常会提供相应的配置选项。大多数官方源码都会包含一个 configure 脚本。在编译之前,可以在源码目录下使用以下命令来列出可用的配置选项:
./configure --help
如果该脚本提供了 --prefix
选项,则可以使用以下命令指定安装目录:
./configure --prefix=/fs/user/dir
设置完成后再执行安装命令 make install
则可将软件安装到用户指定的目录中。
小心
每个软件包的编译部署方法可能不同,强烈建议首先查看各软件的安装指引文件。
用户身份使用包管理器安装软件¶
用户在容器中仅具备普通身份(星光账号)权限,如果使用镜像内默认包管理器 apt、yum 等包管理器,将会由于没有管理员权限而失败。此时,可以使用 /app/ubuntu/bin/apt-get
和 /app/centos/bin/yum
代替。
例如,要在基于 ubuntu
的容器中安装 vim
,请执行:
/app/ubuntu/bin/apt-get update
/app/ubuntu/bin/apt-get install -y vim
若要在基于 centos
的容器中安装 wget
,请执行:
/app/centos/bin/yum install -y wget
备注
这种安装方法需要对待安装的程序进行额外处理,可能在一些特殊情况下导致安装失败或程序运行异常。在这种情况下,建议您尝试 构建自定义的镜像 解决问题。
SSH 连接不稳定¶
当通过 SSH 或基于 SSH 的工具(如 VSCode )连接容器作业时,如果遇到连接在闲置几分钟后自动断开的问题,您需要配置 SSH 定期发送心跳包以维持连接。
心跳包的发送可以在客户端(您的电脑)或服务端中任一端进行配置。我们推荐您修改本地客户端的配置。
修改客户端配置¶
客户端的配置通常是一个名称为 config
的文件。在 Linux 和 MacOS 下,它位于:
~/.ssh/config
(用户个人配置文件)/etc/ssh/ssh_config
(系统全局配置文件)
在 Windows 下,它位于:
%USERPROFILE%\.ssh\config
(用户个人配置文件)%ALLUSERSPROFILE%\ssh\ssh_config
(系统全局配置文件)
备注
用户个人配置文件仅对用户本身生效,系统全局配置文件则对所有用户生效。
为了修改客户端配置,使其定期发送心跳包,您可以在上述任意一个配置文件的开头中添加以下内容:
Host *
ServerAliveInterval 60 # 发送心跳包的间隔,单位为秒
ServerAliveCountMax 3 # 可以接受的心跳包发送失败次数
其中 ServerAliveInterval
和 ServerAliveCountMax
的值可以根据您的网络环境进行调整。
仅修改单个连接的配置
在某些情况下,您可能希望仅针对指定连接修改配置,例如针对 proxy.nscc-gz.cn
域的连接:
Host proxy.nscc-gz.cn
HostName proxy.nscc-gz.cn
Port 8022
User [your_username]
ServerAliveInterval 60
ServerAliveCountMax 3
修改服务端配置¶
备注
当且仅当您使用自己制作的镜像启动作业时,才可通过修改服务端配置的方式解决连接不稳定问题。
服务端配置通常是一个名称为 sshd_config
的文件,您可以修改您镜像中的 /etc/ssh/sshd_config
文件,调整其中的 ClientAliveInterval
和 ClientAliveCountMax
以设置心跳包发送频率。