代码之家  ›  专栏  ›  技术社区  ›  Sarvo

Docker提交更改将覆盖默认的start命令

  •  0
  • Sarvo  · 技术社区  · 8 年前

    我有一张jupyter notebook docker的照片 https://hub.docker.com/r/jupyter/datascience-notebook/ .
    通常我使用这个命令运行笔记本

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

    这非常有效,我收到的信息是笔记本正在运行。我能够创建笔记本,运行它们等等。
    现在,我想从安装jupyter contrib扩展 https://github.com/ipython-contrib/jupyter_contrib_nbextensions . 我遵循以下说明: 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 回复  |  直到 8 年前
        1
  •  1
  •   yamenk    8 年前

    问题是您已经提交了一个用命令启动的容器 /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
    

    然后从terminal exec进入容器并安装 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> . 并运行构建的映像。

    推荐文章