在提供的PAI-DSW环境中使用streamlit run app.py --server.port 8000方式创建的应用,从浏览器访问对应IP与端口是不通的,modelscope是否因平台入口方向没有放通对应端口?
在PAI-DSW环境中使用streamlit run app.py --server.port 8000
方式创建的应用,从浏览器访问对应IP与端口不通的问题,可能涉及以下几个方面的原因和解决方法:
在PAI-DSW中,默认情况下,服务运行时绑定的IP地址为127.0.0.1
(即本地回环地址),这意味着服务仅能在本地访问,而无法通过外部网络访问。
解决方法:
确保在启动Streamlit应用时,使用--server.address
参数将服务绑定到0.0.0.0
,以允许外部访问。例如:
streamlit run app.py --server.port 8000 --server.address 0.0.0.0
这会将服务绑定到所有可用的网络接口上,从而允许外部流量访问。
ModelScope或PAI-EAS平台可能未对特定端口(如8000)进行放通。如果服务需要通过公网访问,则必须确保平台的安全组规则或防火墙配置允许该端口的流量通过。
解决方法:
- 检查PAI-EAS或ModelScope平台的安全组规则,确认是否已放通8000端口。 - 如果未放通,可以通过以下步骤进行配置: 1. 登录阿里云控制台。 2. 进入安全组管理页面,找到对应实例的安全组。 3. 添加一条入站规则,允许TCP协议的8000端口流量。
如果直接在DSW中运行Streamlit应用,可能会受到DSW环境的限制。建议将应用打包为Docker镜像并通过EAS进行部署,这样可以更好地管理网络配置和服务运行环境。
操作步骤:
1. 编写Dockerfile
创建一个包含Streamlit应用的Docker镜像。示例Dockerfile如下:
FROM python:3.9
RUN pip install streamlit
COPY app.py /app/app.py
WORKDIR /app
EXPOSE 8000
CMD ["streamlit", "run", "app.py", "--server.port=8000", "--server.address=0.0.0.0"]
docker build -t streamlit-app .
docker tag streamlit-app <your-acr-repo>/streamlit-app:latest
docker push <your-acr-repo>/streamlit-app:latest
{
"metadata": {
"name": "streamlit-demo",
"instance": 1,
"cpu": 2,
"memory": 4000
},
"containers": [
{
"image": "<your-acr-repo>/streamlit-app:latest",
"port": 8000
}
]
}
部署命令:
eascmdwin64 create service.json
eascmdwin64 logs <service-name>
根据上述分析,问题的根本原因可能是服务未绑定到0.0.0.0
或平台未放通8000端口。建议按照以下优先级解决问题: 1. 修改Streamlit启动命令,绑定到0.0.0.0
。 2. 检查并配置平台的安全组规则,确保8000端口已放通。 3. 考虑通过EAS部署服务,以获得更灵活的网络和资源配置能力。
如果问题仍未解决,请提供更详细的错误信息或日志内容以便进一步排查。