当Docker容器以Exited(0)的状态无法启动时的解决方法:

当使用docker-compose启动容器并尝试进入容器内部时,遇到无法进入的情况,原因是”退出 (0)”。下面是解决此问题的方法。

【场景】在Exited(0)的情况下,容器无法启动。

在使用docker-compose启动容器之后,尝试执行以下命令进入容器内部,但无法成功。

docker compose exec サービス名 bash
// 実行結果
// service "サービス名" is not running

実行結果で「service is not running」と表示されているので、どうやらコンテナが稼働していないようです。
念のため、「docker ps -a」コマンドを実行し、コンテナの稼働状況を確認してみる。

$ docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS                     PORTS     NAMES
4c0e3f7d179c   docker-dev-app   "docker-php-entrypoi…"   20 minutes ago   Exited (0) 7 minutes ago             docker-dev-app-1

ステータスを確認すると、「Exited (0)」と表示されていました。
Exitのステータスコードは「0」なので、コンテナが起動してそのまま正常終了しています。

【原因】没有持续运行容器的进程。

色々調べてみると、原因はdocker側の仕様で、ポート待受をしていないコンテナを起動した場合、コンテナを起動させ続けるためのプロセスを実行させておかないと、そのまま正常終了するようになっているからでした。
そのため、特にエラーもなく、正常終了しているのはdockerの仕様上では間違っていないということです。
原因がわかったので、コンテナを起動させ続けるための何らかのプロセスを入れることで解決できそうです。

将容器与主机的标准输入输出连接起来。

コンテナ起動後にフォアグラウンドで動作するプロセスを実行させることで解決できます。
フォアグラウンドとは、実行する処理(プロセス)の完了を待ち、それが完了するまで次のプロセスが実行できない状態のことを意味します。
dockerには、コンテナとホストマシンの標準入出力を繋げる設定があるので、それをに有効にすることでコンテナを起動させ続けることができます。

使用Docker Compose时,可以通过将docker-compose.yml文件中的”stdin_open”和”tty”设置为true来启用相关配置。

services:
  サービス名:
        images: xxxxx
        container_name: xxxxx
        (省略)
        stdin_open: true
        tty: true
    • 「stdin_open」は、ホストマシンの標準入力とコンテナを繋ぐオプションで、trueにするとホストマシンでの入力がコンテナに伝えることができるようになる。

 

    「tty」は、ホストマシンの標準出力とコンテナを繋ぐオプションで、trueにするとコンテナの出力をホストマシンで確認できるようになる。

顺便提一句,如果您不想使用docker compose而是想通过docker run命令从镜像文件启动容器,则可以添加”-itd选项”,这样可以持续以相同的设置启动容器。

docker run -itd イメージ名

总结

原因是在容器启动后没有任何前台进程运行,导致容器无法启动并立即退出。

可以通过启用将容器和主机机器的标准输入输出连接的设置来持续启动容器。

    • docker composeで起動する場合は、docker-compose.ymlの 「stdin_open」と 「tty」をtrueにしておく

 

    docker runで起動する場合は、「-itd」オプションを付与しておく

当容器无法启动时,请注意是否遗漏了以下设置:”Exited (0)”。


参考网站
解决docker-compose状态退出为0的方法
持续运行Docker容器

广告
将在 10 秒后关闭
bannerAds