Docker提交更改会覆盖默认启动命令

时间:2018-01-23 21:09:02

标签: docker package jupyter-notebook

我有https://hub.docker.com/r/jupyter/datascience-notebook/的jupyter笔记本码头图片 通常我使用此命令运行笔记本

docker run -it --rm -p 8888:8888 -v /home/folder/Projects/:/home/jovyan/Projects -e NB_UID=1000 jupyter/datascience-notebook

这完美无缺,我收到了笔记本正在运行的消息。我能够创建笔记本,运行它们等 现在我想从https://github.com/ipython-contrib/jupyter_contrib_nbextensions安装jupyter contrib扩展。我按照https://gist.github.com/glamp/74188691c91d52770807的说明进行操作 使用
docker run -it jupyter/datascience-notebook /bin/bash
命令我能够进入容器。然后我使用pip和bash来安装包。所有这一切顺利。我退出容器并使用容器ID提交更改。

docker commit containerid imagename

问题是在提交更改后,当我运行容器时,我会看到bash提示符而不是notebook start命令。

是否有办法在不更改映像的启动命令的情况下提交包安装更改。或者有没有办法编辑容器图像而不实际运行图像?

1 个答案:

答案 0 :(得分:1)

问题是您已经提交了一个使用命令/bin/bash启动的容器。

您需要的是正常启动容器使用您最初添加-d选项以释放终端的命令:

docker run -it --rm -d --name datascience-notebook -p 8888:8888 -v /home/folder/Projects/:/home/jovyan/Projects  -e NB_UID=1000  jupyter/datascience-notebook

然后从终端执行到容器并安装contrib extenstions

docker exec -it datascience-notebook /bin/bash

退出容器并提交图像:

docker commit datascience-notebook <imagename>

<强>更新

如果在容器运行时无法安装扩展,解决方案是使用Dockerfile构建自定义Docker镜像

FROM jupyter/datascience-notebook
RUN <installation commands>

最后使用docker build -t <image-name> .构建图像并运行构建的图像。