当执行【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

广告
将在 10 秒后关闭
bannerAds