DockerコンテナCentOS7が起動直後にExit 0で終了しログインできない場合の対処

IT技術

はじめに

DockerでCentOS7のコンテナを起動したところ、起動直後にステータスがExit 0となって終了し、コンテナに起動できなくなる事象が発生した。

本記事では原因と対処方法を記載する。

システム環境

各種バージョン

  • Dockerホストサーバ
    • Oracle Linux Server release 7.9
    • Docker 19.03.11
    • docker-compose 1.29.2
  • Dockerコンテナ
    • CentOS 7

Docker構成ファイル

docker-compose.yml

version: '3'
services:
  testserver1:
    image: testserver:vrfy
    build: ./testserver
    hostname: testserver1
    networks:
      - dockernet
  testserver2:
    image: testserver:vrfy
    build: ./testserver
    hostname: testserver2
    networks:
      - dockernet
networks:
  dockernet:

Dockerfile

FROM centos:7

発生事象

docker-compose buildコマンドでpull & buildする。

[root]# docker-compose build
Building testserver1
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM centos:7
Trying to pull repository docker.io/library/centos ... 
7: Pulling from docker.io/library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
 ---> 8652b9f0cb4c
Successfully built 8652b9f0cb4c
Successfully tagged testserver:vrfy
Building testserver2
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM centos:7
 ---> 8652b9f0cb4c
Successfully built 8652b9f0cb4c
Successfully tagged testserver:vrfy
[root]#

docker-compose upコマンドでコンテナを起動する。

[root]# docker-compose up -d
Creating network "test_dockernet" with the default driver
Creating test_testserver2_1 ... done
Creating test_testserver1_1 ... done
[root]#

docker-compose psコマンドでコンテナ状態を確認すると、StateがExit 0となっており、終了してしまっている。

[root]# docker-compose ps
       Name           Command    State    Ports
-----------------------------------------------
test_testserver1_1   /bin/bash   Exit 0        
test_testserver2_1   /bin/bash   Exit 0        
[root]#

ログインしようとするも、エラーになりログイン不可。

[root]# docker exec -it test_testserver1_1 bash
OCI runtime exec failed: exec failed: cannot exec a container that has stopped: unknown
[root]# docker exec -it test_testserver1_1 /bin/bash
Error response from daemon: Container e880d5f7132fa2d0a01b820bb05e1779c28b2b8a2674d3fd652a5b0199bf8092 is restarting, wait until the container is running
[root]#

原因・対処方法

原因はコンテナが標準入力を受け付ける状態になっていないためだった。

docker-compose.ymlファイルにstdin_open: trueを追加することで解決した。

docker-compose.yml(修正後)

version: '3'
services:
  testserver1:
    image: testserver:vrfy
    build: ./testserver
    hostname: testserver1
    networks:
      - dockernet
    stdin_open: true ★追加
  testserver2:
    image: testserver:vrfy
    build: ./testserver
    hostname: testserver2
    networks:
      - dockernet
    stdin_open: true ★追加
networks:
  dockernet:

この設定でコンテナを起動すると、StateがUpとなり、ログインできるようになった。

[root]# docker-compose up -d
Creating network "test_dockernet" with the default driver
Creating test_testserver1_1 ... done
Creating test_testserver2_1 ... done
[root]# 
[root]# docker-compose ps
       Name           Command    State   Ports
----------------------------------------------
test_testserver1_1   /bin/bash   Up           
test_testserver2_1   /bin/bash   Up           
[root]# 
[root]# docker exec -it test_testserver1_1 bash
[root@testserver1 /]# uname -n
testserver1
[root@testserver1 /]#
タイトルとURLをコピーしました