当执行【Docker】的docker run和docker start命令无法启动容器时的解决方法
由于我还是个初学者,虽然大致了解了Docker的工作原理,但在执行docker run命令或docker start命令时,遇到了容器无法启动的问题。在这里,我想记录下我进行了各种尝试和解决问题的方法。
工作环境
操作系统:Windows 10 家庭版 22H2
Docker 版本:24.0.6
Windows PowerShell 版本:5.1.19041.3031
前提知識
对于处理Docker来说,就个人而言,这篇文章包含了最清晰易懂的解释和图解,是最好的基础。
Docker到底是什么?【初学者向】- RAKUS开发者博客| 拉库斯工程师博客
如果对Docker不太了解的人,可以参考上述内容。
发生的例子
在考虑了上述前提的基础上,执行docker run命令或docker start命令,容器应该能够成功启动…(以为)。
嗯,不试试怎么知道呢。我们马上试试吧。首先是docker run命令。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
// この段階ではイメージが全くないことが分かります。
> docker run centos:centos7
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 2 years ago 204MB
// docker runコマンドを実行したことでCentOSのイメージが入ったことが確認できます。
// それでは、Dockerコンテナの状態がどうなっているか見てみましょう。
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
// おや?起動中のコンテナが表示されるはずなのに、起動中のコンテナが全くないことが分かります。
// 一応、停止中も含めたすべてのコンテナを見てみることにしましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c4eb34decc1 centos:centos7 "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago ecstatic_jemison
// コンテナはしっかり作成できていますがExited(0)となっており、停止中になっていることが分かりました。なぜ?
接下来尝试使用docker start命令。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
// この段階ではイメージが全くないことが分かります。
// 先ほど入れたイメージは一旦削除しました
> docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview centos:centos7
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 2 years ago 204MB
// docker pullコマンドを実行したことでCentOSのイメージが入ったことが確認できます。
// しかし、コンテナ自体はまだ作成されていません。
// 一応、確認しておきましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
// やはりコンテナはまだ何も作成されていません。
// それでは、コンテナを作ってみましょう。
> docker create centos:centos7
42412a08dbb1c2e8b81651e11120fa544e7bbc64ecd9612e2a889ca48af7df08
// docker createコマンドを実行したことでコンテナが作成されたはずです。確認してみましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42412a08dbb1 centos:centos7 "/bin/bash" 3 minutes ago Created blissful_joliot
// コンテナがしっかり作成されていることが分かります。
// 当たり前ですが、この時点ではまだコンテナは起動していません。
// それでは、コンテナを起動させてみましょう
> docker start blissful_joliot
blissful_joliot
// コンテナを起動できたでしょうか?確認してみましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42412a08dbb1 centos:centos7 "/bin/bash" 11 minutes ago Exited (0) About a minute ago blissful_joliot
// やはりExited(0)となっており、コンテナを起動できていません。なぜ?
复习一下启动容器的步骤流程。
在中文中,无论是使用docker run命令还是docker start命令,它们都是在执行相同的操作。
执行docker run命令
docker run命令是执行以下三个操作的命令:
– 获取Docker镜像(docker pull)
– 从Docker镜像创建Docker容器(docker create)
– 启动创建的Docker容器(docker start) ←在这里出现问题?
启动Docker命令
1.执行docker pull命令,获取Docker镜像。
2.执行docker create命令,从Docker镜像创建Docker容器。
3.执行docker start命令,启动已创建的Docker容器。←这里出现问题?
解决方法
非常感谢在我的旧Twitter上发帖并表达我对问题的困扰。有位热心的网友给了我解决方案,还提供了参考网站。非常感谢您。
①执行Docker运行命令
保持Docker容器持续运行- 网页开发笔记
根据上述的URL,需要在docker run命令中添加选项指令。具体来说,执行以下操作即可。
使用Docker运行一个交互式后台容器,容器名称为(コンテナ名)。
让我们实际执行一下。
> docker run -itd centos:centos7
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
38c774868e5809cc276d3312b8f0ca786fdce7768b304ac779f4014a0f336378
// さて、ホントにDockerコンテナを起動できているのでしょうか?
// まずは、Dockerイメージの確認をします。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 2 years ago 204MB
// 上手く入ってますね。
// 次に、起動中のDockerコンテナのみを表示させてみましょう。
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38c774868e58 centos:centos7 "/bin/bash" 4 minutes ago Up 4 minutes interesting_lalande
//上手く起動できているようです。成功ですね!!
-itd是一个选项。将每个选项-i、-t和-d合并成-itd。
虽然可以在官方参考文档中阅读选项的详细信息,但我对此一知半解,所以暂且跳过。(我会附上官方参考文档的URL。在PowerShell中执行docker run –help命令也可以查看选项的相关信息。)
Docker run参考文献
https://docs.docker.jp/engine/reference/run.html
② Docker 启动命令(失败)
我最初觉得docker start命令有问题,所以尝试给docker start命令加了一些选项。然而,经过查询我发现,虽然docker start命令有-i选项,但是没有-t和-d选项。(我还附上了docker start命令官方参考文档的URL,你可以在PowerShell中运行docker start –help来查看选项。)
Docker启动参考引用
https://docs.docker.cn/engine/reference/commandline/start.html
如果只有选项-i呢?简单地说,无法启动容器。
③docker create命令
docker start命令不能启动Docker容器…那么怎么办呢?
在我进行一些研究后,我找到了以下的文章。
Docker启动命令的用法(使用实例进行说明)
https://www.memotansu.jp/docker/609/
基于上述文章,我产生了一个预测,即尝试在docker create命令中添加选项可能会成功。总结来说,这是正确的答案。剩下的就是要添加哪个选项?
虽然docker create命令有很多选项,但没有-d选项。应该添加的选项是-it。因此,只需要执行以下命令即可:
根据这篇文章,我猜想在docker create命令中添加选项也许会成功。总而言之,这是正确的答案。剩下的是要添加哪个选项?
虽然docker create命令有很多,但没有-d选项。应该添加的选项是-it。因此,只需要执行下面的命令就可以了。
创建一个交互式的Docker容器(镜像名称)。
一般来说,我也会给出docker create命令的官方参考文档URL。您还可以在PowerShell中运行docker create –help命令来查看有关选项的信息。
Docker 创建参考文档
https://docs.docker.jp/engine/reference/commandline/create.html#id13
那么,让我来进行演示吧。(从完全没有Docker镜像的情况开始。)
// まずはいつも通りDockerイメージを入れます。
> docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview centos:centos7
// 次に上述したオプションを組み入れたコマンドを使って、Dockerコンテナを作成します。
> docker create -it centos:centos7
5cb97bf23cc4e3382ed72aebb0b328d4579e963582b8a95f7b1177e308f70861
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cb97bf23cc4 centos:centos7 "/bin/bash" 3 minutes ago Created youthful_poitras
// これでDockerコンテナが作成されていることが分かりました。
// 最後に作成したDockerコンテナを起動します。ホントに起動できるでしょうか?
> docker start youthful_poitras
youthful_poitras
// 確認します。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cb97bf23cc4 centos:centos7 "/bin/bash" 8 minutes ago Up About a minute youthful_poitras
// STATUSがUpになっているので起動できています。成功です!
结束
也许,因为我写的内容可能是关于Docker的基础知识,所以对许多人来说可能没有需求的文章,但是作为一个初学者,我觉得如果有遇到类似问题困扰的人,如果能够帮到他们就好了。那么,再见!Goodbye!
请参考
Docker是什么?【初学者友好】- RAKUS开发者博客 | 拉克斯工程师博客
保持Docker容器持续运行- WEB开发笔记
Docker运行参考文档
https://docs.docker.jp/engine/reference/run.html
Docker启动参考文档
https://docs.docker.jp/engine/reference/commandline/start.html
docker start命令的使用方法(通过实例进行说明)
https://www.memotansu.jp/docker/609/
Docker创建参考
https://docs.docker.cn/engine/reference/commandline/create.html#id13