python - 使用 jupyter notebook 运行 docker 镜像的问题
问题描述
我有一个 jupyter 笔记本和一个文件夹中的数据文件。我做了一个 Dockerfile 并写了以下几行
FROM jupyter/base-notebook
ARG export_file=FooD_Kind.csv
RUN pip install jupyter
RUN pip install numpy
RUN pip install matplotlib
RUN pip install pandas
RUN pip install pulp
COPY $export_file FooD_Kind.csv
COPY task_4kind.ipynb /
CMD ["jupyter notebook", "task_4kind.ipynb"]
docker build -t nameofimage
我可以使用But when I do成功构建图像docker run -it nameofimage
。我得到一个错误[FATAL tini (7)] exec jupyter notebook failed: No such file or directory
。
如何在 docker 中运行这个 jupyter notebook?
编辑:
我在最后一行尝试了两次替换,
我将最后一行替换为
# Start the jupyter notebook
ENTRYPOINT ["jupyter", "notebook", "--ip=*"]
它运行并在屏幕上给出一个令牌,但是当我将令牌粘贴到本地主机上时,它给出了无效凭据错误
然后我将最后一行替换为
CMD jupyter notebook --port=8888 --no-browser --ip=0.0.0.0 --allow-root
它运行并在屏幕上给出一个令牌,但是当我将令牌粘贴到本地主机上时,它给出了无效凭据错误
解决方案
如果您检查原始 Dockerfile,您会发现以下内容;
ENTRYPOINT ["tini", "-g", "--"]
CMD ["start-notebook.sh"]
# Add local files as late as possible to avoid cache busting
COPY start.sh /usr/local/bin/
COPY start-notebook.sh /usr/local/bin/
COPY start-singleuser.sh /usr/local/bin/
start-notebook.sh
会给你一个有效的令牌。后续文件允许与图像交互,这些选项在docs中描述。
请注意,还有更多警告,例如,哪个用户正在运行 Dockerfile 中描述的命令:root
或 jovyan
(Jupyter 用户)?root 执行的命令可能会以不允许jovyan
加载给定包的方式设置权限。为了解决这个问题,所有 Jupyter(基本笔记本和派生的)Dockerfile 中都有一行:
RUN fix-permissions /etc/jupyter/
这是一个派生笔记本的外观示例。
从本质上讲,要么删除您的自定义 ENTRYPOINT / CMD 并使用原始的,要么确保您获得正确的令牌。另外,修复权限。
推荐阅读
- scala - java.lang.RuntimeException:未检测到主类 - Docker
- r - 循环匹配不同长度的data.tables
- android - TreeMap 和 ArrayMap 的实际区别
- javascript - 试图隐藏带有 id 的元素
- android - 在 response.await() 之后返回的 Kotlin 协程
- sql-server - 按另一个表上的 DATETIME 范围分组
- java - 将 Jetty 服务器配置为不允许 TCP 分段
- python - 如何询问玩家是否想在他们死后重试,如果他们说是,那么让游戏重新开始
- grafana - Prometheus:帮助编辑/配置 Cisco MIB 的 snmp_exporter 的 generator.yml 文件
- pyspark - Pyspark - 如何将多个数据帧的列连接成一个数据帧的列