我正在 Streamlit 应用程序中显示 Plotly 图表。当我在本地运行该应用程序时,图表看起来就像我想要的那样。但是,当我在 Docker 容器内部署应用程序时,图表看起来有所不同。有谁知道为什么在 Docker 容器内运行时格式会不同?
这是我在本地 Python 3.9.7 运行应用程序时图表的外观:
这是我在 Docker 容器中运行它时的样子:
有几个区别:
Docker 容器中似乎没有应用一些额外的样式。有谁知道为什么会这样?
这里是一些用于基本可重现示例的 Python 代码:
import streamlit as st
import plotly.graph_objects as go
from plotly.subplots import make_subplots
# I tried this workaround suggested in another answer, but it didn't help
import plotly.io as pio
pio.templates.default = 'plotly'
fig = make_subplots(rows=2, cols=1)
x_line = [1, 2, 3, 4, 5]
y_line = [10, 12, 8, 15, 7]
x_bar = ['A', 'B', 'C', 'D', 'E']
y_bar = [20, 15, 25, 18, 22]
fig.add_trace(go.Scatter(x=x_line, y=y_line, mode='lines', name='Line Chart'), row=1, col=1)
fig.add_trace(go.Bar(x=x_bar, y=y_bar, name='Bar Chart'), row=2, col=1)
fig.update_layout(title_text='Subplots with Line and Bar Charts', showlegend=True)
st.plotly_chart(fig)
这是我的 Dockerfile:
FROM python:3.9-slim
COPY requirements.txt requirements.txt
# Install your requirements
RUN python -m pip install --upgrade pip
RUN python -m pip install -r requirements.txt
# Copy local app directory into app direcetory in Docker container.
# The example python code above is in `app/app.py`
COPY app app
EXPOSE 8080
CMD ["python", "-m", "streamlit", "run", "app/app.py", "--server.port=8080", "--server.address=0.0.0.0", "--server.enableWebsocketCompression=false"]
需求.txt:
streamlit==1.12.0
plotly==5.18.0
我能够通过固定更多软件包版本来解决该问题。具体来说,我必须指定
altair==4.2.2
,这很奇怪,因为我没有在代码中使用 Altair。
我的
requirements.txt
文件现在看起来像这样:
# requirements.txt
streamlit==1.12.0
plotly==5.18.0
altair==4.2.2