😸

【Docker】 Restarting のままでコンテナが立ち上がらないとき

2024/12/18に公開

Dockerを使用してコンテナを管理する際、コンテナが「Restarting」のままで立ち上がらないという問題に直面することがある。この問題は特に、Dockerfileやdocker-compose.ymlファイルの設定に問題がある場合に発生する。本記事では、具体的な例を挙げながら問題解決までの道のりを紹介する。

1. 初期設定と問題の発生

Dockerを使用してMariaDBのコンテナを構築しようとした際、次のような設定を行った:

Dockerfile

FROM debian:bullseye
RUN apt-get update && apt-get install -y mariadb-server
COPY my.cnf /etc/mysql/my.cnf
RUN mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql
CMD ["bash"]

docker-compose.yml

version: '3.8'
services:
    mariadb:
        container_name: mariadb
        build: ./requirements/mariadb
        image: mariadb
        volumes:
            - mariadb:/var/lib/mysql
        env_file:
            - .env
        restart: always
        ports:
            - "3306:3306"
        command: ["bash"]

これらの設定でコンテナを立ち上げると、docker-compose up -d mariadb を実行してもコンテナは「Restarting」の状態のままで、起動しないという問題が発生した。

2. エラーメッセージの解析

コンテナが再起動を繰り返している原因を突き止めるために、docker logs mariadb コマンドでログを確認した。しかし、ログには具体的なエラーメッセージが表示されず、問題の特定には至らなかった。次に、docker inspect mariadb コマンドを使用してコンテナの詳細情報を確認したが、依然として原因は不明だった。

3. 設定の見直しと試行錯誤

この段階で、以下の設定を試してみたが問題は解決しなかった:

  • Dockerfile内のコマンドの変更
  • MariaDBの設定ファイル(my.cnf)の見直し
  • Dockerイメージの再ビルド
    特に、CMD ["bash"] の部分を CMD ["mysql"] に変更したり、サービスの起動方法を変更したりするなど、様々な試行錯誤を行ったが、依然としてコンテナは「Restarting」の状態のままだった。

4. 解決策の発見:ttyオプションの追加

多くの試行錯誤の末、docker-compose.ymltty: true オプションを追加することで問題が解決した。このオプションを追加することで、コンテナが正しく起動し、bash シェルにアクセスできるようになった。

修正後のdocker-compose.yml


version: '3.8'
services:
    mariadb:
        container_name: mariadb
        build: ./requirements/mariadb
        image: mariadb
        volumes:
            - mariadb:/var/lib/mysql
        env_file:
            - .env
        restart: always
        ports:
            - "3306:3306"
        command: ["bash"]
        tty: true

5. まとめ

コンテナが「Restarting」のまま立ち上がらない場合の問題解決には、設定ファイルの見直しと詳細なログ解析が重要である。本記事で紹介したように、tty: true オプションを追加することでコンテナが正しく起動することがある。この経験を通じて、Dockerの設定に関する知識を深めることができた。今後も引き続き、問題解決に向けた柔軟なアプローチを心がけていきたい。

Discussion