在ModelArts中使用自定义的容器镜像创建AI应用并进行部署在线服务时,需要满足镜像打包的规范,主要有两点:
1)容器镜像中的服务只能使用8080端口监听,使用其他端口会导致ModelArts无法发现服务正常启动,从而立即终止容器的启动。
2)容器镜像打包要使用Dockerfile,并且Dockerfile中的CMD启动的进程不能关闭,否则CMD的进程一旦关闭,整个容器也会自动关闭,从而导致在线服务部署失败。由于CMD启动的进程是一个shell脚本,所以需要采取一定的措施确保CMD执行的进程一直有效。措施如下,尝试过多种方法让CMD的进程一直运行,但是大多是不可行的:
1)在shell脚本中的最后添加/bin/bash。
此方法不可行,无法完成在线部署。
2)在shell脚本中的最后添加sleep。
此方法无法完成在线部署。
3)在shell脚本的最后添加tail -f /dev/null。
此方法无法完成在线部署。
4)在CMD命令后添加sleep infinity,如CMD ./test.sh; sleep infinity。
此方法无法完成在线部署。
5)在CMD命令后添加tail -f /dev/null,如CMD ./test.sh; tail -f /dev/null。
此方法可以正常完成在线部署,并使得镜像创建的容器正常运行。