首页 > 解决方案 > 如何在不执行指定命令的情况下启动 docker 容器

问题描述

我制作了一个 Docker 容器来充当 Jupyter 服务器

docker run -i -t -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser"

是否可以在不执行指定命令的情况下启动已停止的容器?在启动时,它会在尝试创建现有目录时停止。

kosh@LinuxPC:~$ docker ps -a --no-trunc
CONTAINER ID                                                       IMAGE               COMMAND                                                                                                                                                                                                    CREATED             STATUS                     PORTS               NAMES
bb9ff79baf4b2a18289e14338cecdd3cdfa3bbe2a84cba0a63430de1e624b769   condaim             "/bin/bash -c '/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser --allow-root'"   24 hours ago        Exited (1) 2 minutes ago                       jovial_clarke

kosh@LinuxPC:~$ docker start -i jovial_clarke
Collecting package metadata (current_repodata.json): ...working... done
Solving environment: ...working... done

# All requested packages already installed.

mkdir: cannot create directory ‘/opt/notebooks’: File exists

标签: docker

解决方案


每当你停止然后停止容器时,它总是会运行 entry 命令。因此,当您第一次启动容器时,您只需更改命令即可。

所以逻辑应该是创建目录,如果不存在应该是mkdir -p /opt/notebooks错误来自这个命令。

所以相应地更新 docker run 命令,它将在下次启动时工作。

docker run -i -t -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir -p /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser"

推荐阅读