如何启动已停止的Jupyter服务Docker容器且不执行原指定命令?
启动已停止容器时跳过原命令的解决方案
当然可以解决这个问题!你的容器启动失败的核心原因是:原启动命令里用&&串联了多个操作,其中mkdir /opt/notebooks在目录已经存在时会抛出错误,导致整个命令链中断,容器直接退出。下面是两种简单可靠的处理方式:
方案1:将容器提交为新镜像,自定义启动命令
这是最推荐的方式,相当于把当前容器的状态(已经安装好Jupyter、创建过notebooks目录)保存为一个新镜像,之后用新镜像启动时直接跳过那些已经完成的操作:
- 提交停止的容器为新镜像:
docker commit jovial_clarke anaconda-jupyter-custom
- 用新镜像直接启动Jupyter服务(不需要再执行conda安装和mkdir操作了):
docker run -i -t -p 8888:8888 anaconda-jupyter-custom /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser --allow-root
如果需要先进入容器做调试或修改,可以启动交互式bash会话:
docker run -i -t -p 8888:8888 anaconda-jupyter-custom /bin/bash
方案2:临时修改容器的启动命令(进阶操作)
如果你不想创建新镜像,也可以直接修改容器的配置来替换原启动命令,但这种方法需要操作Docker的内部文件,风险稍高,适合有一定Docker经验的用户:
找到你的容器配置目录,路径通常是
/var/lib/docker/containers/<容器ID>,你的容器ID是bb9ff79baf4b2a18289e14338cecdd3cdfa3bbe2a84cba0a63430de1e624b769。编辑目录下的
config.v2.json文件,找到Cmd字段,把原命令数组替换成你想要执行的命令(比如直接启动Jupyter的命令,或者["/bin/bash"])。重启Docker服务,然后启动容器:
sudo systemctl restart docker docker start -i jovial_clarke
小建议
以后创建类似的Jupyter容器时,可以把mkdir /opt/notebooks改成mkdir -p /opt/notebooks,-p参数会自动处理目录已存在的情况(存在时不报错,不存在时创建),这样就不会再出现启动失败的问题啦。
内容的提问来源于stack exchange,提问作者Kosh
相关产品推荐
相关产品推荐

