收藏
回答

云托管docker部署streamlit后无法建立websocket链接?

docker文件内容如下

FROM python:3.9.18
# 设定当前的工作目录
WORKDIR /app
# 拷贝当前项目到/app目录下(.dockerignore中文件除外)
COPY . /app
RUN pip install --user -r requirements.txt -i https://mirrors.tencent.com/pypi/simple/
ENV PATH=/root/.local/bin:$PATH
# 此处端口必须与「服务设置」-「流水线」以及「手动上传代码包」部署时填写的端口一致,否则会部署失败。
EXPOSE 8501
RUN chmod +x /app/start.sh
CMD ["bash", "start.sh"]

requirements.txt内容如下:(streamlit-login-auth-ui只支持python3.9+)

streamlit==1.26.0
streamlit-login-auth-ui==0.2.0
lunar_python==1.3.4

app.py内容如下:(就是个正常的页面,可以换成其他更简单的)

# -*- coding: utf-8 -*-
import os
import streamlit as st
from streamlit_login_auth_ui.widgets import __login__

__login__obj = __login__(auth_token = os.getenv('MAIL_API_TOKEN'),
                    company_name = "Test",
                    width = 200, height = 250,
                    logout_button_name = '登出', hide_menu_bool = False,
                    hide_footer_bool = False,
                    lottie_url = 'https://assets2.lottiefiles.com/packages/lf20_jcikwtux.json')

LOGGED_IN = __login__obj.build_login_ui()

if LOGGED_IN == True:
    st.markown("Your Streamlit Application Begins here!")

start.sh内容如下:

streamlit run /app/main.py

现在的情况是部署完上线以后,开启公网访问,打开网址后一直显示“Please wait...”,浏览器控制台显示“无法建立到 wss://长长的公网域名/_stcore/stream 服务器的连接。”

尝试过在streamlit run后面加--server.enableXsrfProtection=false --server.enableCORS=false --server.enableWebsocketCompression=false --browser.serverAddress=公网域名 --server.port=80 中的一个或几个都没用,当然改server.port也会对应修改EXPOSE端口号和流水线的端口号。

尝试把https改成http后访问也没用。

请问大家有什么建议或者想法吗?



回答关注问题邀请回答
收藏

2 个回答

  • 宋景和
    宋景和
    04-09

    这个问题在好几个平台上都出现,后来调研的一个可能原因是,域名经过了 cdn 加速引起的。/etc/hosts 里面加入源站 IP 是可以连接成功。但是由于IP经常变动,这个很不现实。现在可用的方案就是使用独立IP(非公共入口)可能有帮助(没试过)

    04-09
    有用
    回复
  • Bean
    Bean
    02-03

    朋友 解决了吗? 怎么解决的呢


    02-03
    有用
    回复 1
    • 宋景和
      宋景和
      03-22
      没解决,最后弃疗了用HW的服务器自己搭,你解决了吗?
      03-22
      回复
登录 后发表内容
问题标签