运行 docker 容器中的 jupyter-dash
Running jupyter-dash in docker container
我创建了一个 docker 文件,按照 https://www.youtube.com/watch?v=QkOKkrKqI-k
docker 构建得非常好并且 运行s jupyter 实验室。另外,我可以 运行 一个简单的破折号应用程序。
import plotly.express as px
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
# Load Data
df = px.data.tips()
# Build App
app = JupyterDash(__name__)
app.layout = html.Div([
html.H1("JupyterDash Demo"),
dcc.Graph(id='graph'),
html.Label([
"colorscale",
dcc.Dropdown(
id='colorscale-dropdown', clearable=False,
value='plasma', options=[
{'label': c, 'value': c}
for c in px.colors.named_colorscales()
])
]),
])
# Define callback to update graph
@app.callback(
Output('graph', 'figure'),
[Input("colorscale-dropdown", "value")]
)
def update_figure(colorscale):
return px.scatter(
df, x="total_bill", y="tip", color="size",
color_continuous_scale=colorscale,
render_mode="webgl", title="Tips"
)
# Run app and display result inline in the notebook
app.run_server(mode='inline') --> This doesn't work
app.run_server(mode='jupyterlab') --> This doesn't work
# app.run_server(mode='external') --> This doesn't work
在 docker 文件中,我公开端口 8888 和 8050。同样在构建 docker 文件之后,我 运行 docker 文件使用公开端口命令分别为 8888 和 8050,如下所示。
docker run -it -p 8888:8888 -p 8050:8050 <image-name>
但是,当我 运行 我的 dash 应用程序在 external mode
上时:
然后它告诉我
当我尝试连接 URL 时,我发现它不起作用。
有谁知道如何解决这个问题?我知道如何使用烧瓶打开应用程序,但我想按照视频中建议的传统方式。
Docker 文件:
FROM python:3.8.0
RUN git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it && \
bash ~/.bash_it/install.sh --silent
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
apt-get upgrade -y && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
RUN pip install --upgrade pip && \
pip install --upgrade \
numpy \
pandas \
dash \
Jupyterlab \
ipywidgets \
jupyterlab-git \
jupyter-dash
RUN jupyter lab build
# RUN pip install --upgrade pip && \
# pip install --upgrade \
# jupyterlab "pywidgets>=7.5"
RUN jupyter labextension install \
jupyterlab-plotly@4.14.3 \
@jupyter-widgets/jupyterlab-manager \
@jupyterlab/git
COPY entrypoint.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/entrypoint.sh
COPY config/ /root/.jupyter/
EXPOSE 8888 8050
VOLUME /notebooks
WORKDIR /notebooks
# ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD jupyter lab --ip=* --port=8888 --allow-root
我不确定我的回答是否正确,但我做到了。
如果有人有更好的解决方案,请在此处 post。
- docker 文件保持不变。
- 构建 docker 图像后,我 运行、
docker run -it -p 8888:8888 -p 8050:8050 <ImageName>
我所做的唯一更改是(app.run_server
中的主机名)
所以我的主要命令是这样的:
app.run_server(mode='inline', host="0.0.0.0", port=8050, dev_tools_ui=True)
这适用于 inline
、external
和 jupyterlab
。
我创建了一个 docker 文件,按照 https://www.youtube.com/watch?v=QkOKkrKqI-k
docker 构建得非常好并且 运行s jupyter 实验室。另外,我可以 运行 一个简单的破折号应用程序。
import plotly.express as px
from jupyter_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
# Load Data
df = px.data.tips()
# Build App
app = JupyterDash(__name__)
app.layout = html.Div([
html.H1("JupyterDash Demo"),
dcc.Graph(id='graph'),
html.Label([
"colorscale",
dcc.Dropdown(
id='colorscale-dropdown', clearable=False,
value='plasma', options=[
{'label': c, 'value': c}
for c in px.colors.named_colorscales()
])
]),
])
# Define callback to update graph
@app.callback(
Output('graph', 'figure'),
[Input("colorscale-dropdown", "value")]
)
def update_figure(colorscale):
return px.scatter(
df, x="total_bill", y="tip", color="size",
color_continuous_scale=colorscale,
render_mode="webgl", title="Tips"
)
# Run app and display result inline in the notebook
app.run_server(mode='inline') --> This doesn't work
app.run_server(mode='jupyterlab') --> This doesn't work
# app.run_server(mode='external') --> This doesn't work
在 docker 文件中,我公开端口 8888 和 8050。同样在构建 docker 文件之后,我 运行 docker 文件使用公开端口命令分别为 8888 和 8050,如下所示。
docker run -it -p 8888:8888 -p 8050:8050 <image-name>
但是,当我 运行 我的 dash 应用程序在 external mode
上时:
然后它告诉我
有谁知道如何解决这个问题?我知道如何使用烧瓶打开应用程序,但我想按照视频中建议的传统方式。
Docker 文件:
FROM python:3.8.0
RUN git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it && \
bash ~/.bash_it/install.sh --silent
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
apt-get upgrade -y && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
RUN pip install --upgrade pip && \
pip install --upgrade \
numpy \
pandas \
dash \
Jupyterlab \
ipywidgets \
jupyterlab-git \
jupyter-dash
RUN jupyter lab build
# RUN pip install --upgrade pip && \
# pip install --upgrade \
# jupyterlab "pywidgets>=7.5"
RUN jupyter labextension install \
jupyterlab-plotly@4.14.3 \
@jupyter-widgets/jupyterlab-manager \
@jupyterlab/git
COPY entrypoint.sh /usr/local/bin/
RUN chmod 755 /usr/local/bin/entrypoint.sh
COPY config/ /root/.jupyter/
EXPOSE 8888 8050
VOLUME /notebooks
WORKDIR /notebooks
# ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD jupyter lab --ip=* --port=8888 --allow-root
我不确定我的回答是否正确,但我做到了。 如果有人有更好的解决方案,请在此处 post。
- docker 文件保持不变。
- 构建 docker 图像后,我 运行、
docker run -it -p 8888:8888 -p 8050:8050 <ImageName>
我所做的唯一更改是(app.run_server
中的主机名)
所以我的主要命令是这样的:
app.run_server(mode='inline', host="0.0.0.0", port=8050, dev_tools_ui=True)
这适用于 inline
、external
和 jupyterlab
。