我一直进行pull, run, <UPLOAD FILE>, commit, tag, push
循环,只是因为拉动被推入的容器时文件不见而感到沮丧。我的目标是在图像中包含一个ipynb文件,该文件可以作为用户的README /教程。
在阅读其他文章时,我发现commit
是/不是添加文件的方法。是什么导致commit
保留/忽略文件?我应该在提交之前使用docker cp
添加文件吗?
答案 0 :(得分:1)
如果您需要将笔记本文件发布到Docker映像中,请使用Dockerfile,类似这样-
FROM jupyter/datascience-notebook
COPY mynotebook.ipynb /home/jovyan/work
然后,按照您的意愿放置笔记本后,只需运行docker build
,docker push
。为了给您更多帮助,您遇到问题的原因是jupyter图像将笔记本存储在一个卷中。卷中的数据不是映像的一部分,它们位于主机的文件系统上。这意味着commit
不会在工作文件夹中保存任何内容。
确实,ipynb是数据文件,而不是应用程序。正确的方法可能是将ipynb文件上传到某个位置的文件存储,并告诉您的用户下载它,因为他们可以使用一个docker映像来运行许多数据文件。如果您确实希望使用所描述的工作流来生成预构建的图像,则可以将文件放置在不在卷中的其他位置,以便在提交中捕获该文件。
答案 1 :(得分:0)
对于那些正在寻找以docker build
开头的地方的人,以下是我用docker build -t your-image-name:your-new-t
触发的Dockerfile中的行
Dockerfile
FROM jupyter/datascience-notebook:latest
MAINTAINER name <email>
# ====== PRE SUDO ======
ENV JUPYTER_ENABLE_LAB=yes
# If you run pip as sudo it continually prints errors.
# Tidyverse is already installed, and installing gorpyter installs the correct versions of other Python dependencies.
RUN pip install gorpyter
# commenting out our public repo
ENV R_HOME=/opt/conda/lib/R
# https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html
# Looks like /usr/local/man is symlinking all R/W toward /usr/local/share/man instead
COPY python_sdk.ipynb /usr/local/share/man
COPY r_sdk.ipynb /usr/local/share/man
ENV NOTEBOOK_DIR=/usr/local/share/man
WORKDIR /usr/local/share/man
# ====== SUDO ======
USER root
# Spark requires Java 8.
RUN sudo apt-get update && sudo apt-get install openjdk-8-jdk -y
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
# If you COPY files into the same VOLUME that you mount in docker-compose.yml, then those files will disappear at runtime.
# `user_notebooks/` is the folder that gets mapped as a VOLUME to the user's local folder during runtime.
RUN mkdir /usr/local/share/man/user_notebooks