容器类应用常见问题

使用访问入口

对于容器类应用所提交的作业,可能会预留有访问入口以便交互操作,如通过 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

通过 设置网络代理 后才可正常访问互联网。用户可通过以下方式进行判断:

  1. 检查网络代理是否设置成功

    echo $http_proxy
    echo $https_proxy
    
    ../../_images/net_proxy.png
  2. 测试能否访问互联网

    # 若容器内安装有 curl 可通过 curl 进行测试
    curl [url]
    # 若容器内未安装有 curl,可通过 wget 进行测试
    /app/bin/busybox wget [url] -O -
    
    ../../_images/net_access.png

容器内数据上传下载

对于运行中的容器作业,平台支持使用常见的 SSH 工具进行数据的上传和下载,推荐使用 WinSCP 工具。

小技巧

若数据量巨大,可在作业运行前使用硬盘挂载的方式进行数据上传和下载(需联系技术支持人员进行硬盘挂载)。

下面是使用 WinSCP 工具进行数据上传和下载示例。

WinSCP 下载地址: WINSCP

WinSCP 传输文件步骤:

  1. 在 “作业详情” 界面查看作业的主机名、端口号和用户名信息:

查看作业信息
  1. 打开 WinSCP ,根据步骤 1 的信息填写主机名、端口号和用户名信息,密码使用星光平台的登录密码,输入完成后点击 “登录” 按钮:

../../_images/6.png
  1. 选择要登录的作业对应的编号,如本例中的作业编号为 1 ,选择完成后点击 “确定” 按钮:

../../_images/71.png
  1. 进入 WinSCP 的文件传输界面,左侧是本地文件和文件夹,右侧是远程服务器的文件和文件夹:

../../_images/81.png
  1. 上传文件:选中一个本地文件,右击弹出操作菜单,点击 “上传” 即可上传文件到远程服务器:

../../_images/91.png
  1. 下载文件:选中一个远程文件,右击弹出操作菜单,点击 “下载” 即可下载文件到本地服务器:

../../_images/101.png

如何在容器中安装软件

pip 安装用户 python 包

用户直接使用 pip 命令进行 python 包的安装时,安装会失败。若要在星光平台进行用户自定义 python 包安装时需要按照以下几个步骤进行:

  1. 使用包含有 pip 的镜像环境或加载包含 pip 命令的相关 module

  2. 按照 设置网络代理 一节设置好网络代理

  3. 带上 user 参数使用 pip 命令,如: pip install -user xxx

下图演示了使用 pip 安装 scapy 的步骤:

../../_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  # 可以接受的心跳包发送失败次数

其中 ServerAliveIntervalServerAliveCountMax 的值可以根据您的网络环境进行调整。

仅修改单个连接的配置

在某些情况下,您可能希望仅针对指定连接修改配置,例如针对 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 文件,调整其中的 ClientAliveIntervalClientAliveCountMax 以设置心跳包发送频率。