【Docker】 Restarting のままでコンテナが立ち上がらないとき
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.yml
に tty: 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