You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit的st_pages在Docker容器中失效问题求助

Streamlit st_pages菜单Docker部署失效问题排查与解决

问题描述

  • 本地运行Streamlit应用时,st_pages渲染的自定义侧边菜单正常显示
  • 部署到Docker容器后,自定义菜单失效,自动回退为Streamlit默认菜单,无任何报错信息
  • 已确认Docker环境可正常导入st_pages库
  • 尝试切换到代码目录运行应用时,触发错误:
Usage: streamlit run [OPTIONS] TARGET [ARGS]...
Try 'streamlit run --help' for help.

Error: Invalid value: File does not exist: Home.py

相关代码示例

应用代码

import streamlit as st
from st_pages import Page, show_pages, hide_pages
import os

abs_path = os.path.abspath(__file__).strip("Home.py")
show_pages(
    [
        Page(os.path.join(abs_path, "Home.py"), "Home", "🏠"),
        Page(os.path.join(abs_path, "pages", "first.py"), "First Page", "📊"),
    ]
)
st.header("Home Page")

Dockerfile

FROM python:3.12

# Install required python libraries
COPY requirements.txt ./
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# Copy code
COPY src /home/viz_tools

EXPOSE 8080
CMD streamlit run /home/viz_tools/Home.py --server.port=8080

原因分析

1. 路径处理逻辑错误

代码中用os.path.abspath(__file__).strip("Home.py")截取目录的方式完全不可靠:strip是按单个字符匹配删除,不是按完整文件名截取。比如Docker中文件路径是/home/viz_tools/Home.py,strip("Home.py")会把末尾所有匹配的字符删掉,最终得到/home/viz_,导致st_pages找不到指定的页面文件,这时它会自动回退到默认菜单,且不会抛出明确报错。

2. Docker工作目录不匹配

Docker默认工作目录是根目录/,当手动切换到/home/viz_tools后运行streamlit run Home.py,如果之前没设置工作目录,可能因为路径解析问题找不到文件;或者直接用绝对路径运行时,代码里的路径错误导致页面加载失败。

解决办法

方法一:修复路径处理逻辑

用os.path.dirname替代错误的strip方法,这是Python中获取文件所在目录的标准可靠方式:

import streamlit as st
from st_pages import Page, show_pages, hide_pages
import os

# 获取当前文件所在的绝对目录
abs_path = os.path.dirname(os.path.abspath(__file__))
show_pages(
    [
        Page(os.path.join(abs_path, "Home.py"), "Home", "🏠"),
        Page(os.path.join(abs_path, "pages", "first.py"), "First Page", "📊"),
    ]
)
st.header("Home Page")

方法二:优化Docker配置

在Dockerfile中设置工作目录,确保运行命令的路径一致性,避免手动切换目录时出错:

FROM python:3.12

# Install required python libraries
COPY requirements.txt ./
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# Copy code
COPY src /home/viz_tools
# 设置工作目录为代码存放目录
WORKDIR /home/viz_tools

EXPOSE 8080
# 使用相对路径启动应用
CMD streamlit run Home.py --server.port=8080

验证步骤

  1. 重新构建镜像:docker build -t streamlit-app .
  2. 启动容器:docker run -p 8080:8080 streamlit-app
  3. 访问http://localhost:8080,确认自定义侧边菜单正常显示

内容的提问来源于stack exchange,提问作者max_max_mir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:56:15