My開発メモ

docker-compose が exited with code 0 で終了してしまう

以下のような docker-compose.yml で Dockerを起動した。

docker-compose.yml
version: '3'

services:
  php:
    build:
      context: .
    volumes:
      - ./html:/var/www/html
    container_name: my_php
    ports:
      - 8002:80
    environment:
      TZ: Asia/Tokyo
Dockerfile
FROM php:8.3-zts

RUN apt-get update

RUN pecl install parallel \
    && docker-php-ext-enable parallel

WORKDIR /var/www/html

これで、docker-compose up とすると、

Creating my_php ... done
Attaching to my_php
my_php | Interactive shell
my_php | 
my_php | php > my_php exited with code 0

となって、docker-compose ps とすると、

$ docker-compose ps
 Name              Command              State    Ports
------------------------------------------------------
my_php   docker-php-entrypoint php -a   Exit 0

となって、しまう。

これは、コンテナが作成されたけれど、実行するプロセスがないので、コンテナが休止している状態だということである。

対策

docker-compose.yml の末尾に2行を追加した。

docker.compose.yml
version: '3'

services:
  php:
    build:
      context: .
    volumes:
      - ./html:/var/www/html
    container_name: my_php
    ports:
      - 8002:80
    environment:
      TZ: Asia/Tokyo
    stdin_open: true      # <== <1>
    tty: true             # <== <2>

<1> 「ホストマシンの標準入力をコンテナに伝える」=> ON
<2> 「ホストマシンの標準出力にコンテナの出力をつなげる」 => ON

この設定により、コンテナがずっと起動していてくれる。

docker run コマンドの場合は、次のように -itd オプションをつけると同じようにできるということである。

docker run -itd イメージ名

参考

【docker】コンテナがExited (0)で起動しない時の対応

カテゴリー: Docker, memo

タグ: docker-compose, exited

カウント: 60