LAMP環境をXAMPPからDockerに移す初心者がはまりがちなポイントをまとめました。
docker-compose.ymlやDockerfileを設置してdocker-compose up
したけど、思い通りに動かない...
そもそもdocker-compose build
でビルドしたか?できているか?
-
docker ps -a
で停止中コンテナを確認。 - すべてのコンテナ名が一覧にある:ビルドはできているけど、起動に失敗している →2の「ない」へ
- 一部またはすべてが一覧にない:念のため
docker-compose down
してから、もう一度docker-compose build
を実行してログを見る。 - 最終行のコマンドはdocker-compose.ymlのserverに書いた最後のセクションのDockerfileの内容まで走っているか?
コンテナは起動しているか?
docker ps
で起動中コンテナを確認
- ある:起動している
- ない:コンテナが起動していないので、1に戻ってupまたはbuildとupの再試行(だめなら-dつけずに画面でエラーをモニタする)
確認ポイント:docker exec -it <コンテナID>
で中を見てみる
volumes:に書いたディレクトリ指定、接続IP/ホスト名/ポート番号、など
今コンテナがどういう状態かわからない...
安定して動くまではdocker-compose up -d
ではなくdocker-compose up
を使うこと。(写経の時に-dオプションがついてることがありがち)
コンテナ名で始まるログが非同期に流れてくるので、停止したり、エラーが発生していないものがないかを全体的に確認する。
<コンテナ名> exited with code 1
などの終了ステータスが出ていることもある。
参考:終了ステータス | UNIX & Linux コマンド・シェルスクリプト リファレンス
公式MySQLイメージ編
※執筆時はイメージにmysql:5.7を指定して、5.7.23が取得されています。
ユーザー作成エラー
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'localhost'
例えばdocker-compose.ymlで
services:
...
mysql:
environment:
...
MYSQL_USER: root
のように、ユーザー名をrootで指定していると出たり出なかったりする。(出ないこともあった
php:7.2-apache-stretch イメージ編
php.iniをvolumes:セクションで上書きしているときに、手元のphp.iniに書いてあるextension指定がコンテナでは使用できない状態でエラーが表示されていることがあるが、動作はしている。(その拡張を使わなければ動いているので無視しても…
拡張を使おうと思ったらDockerfileのRUNコマンドを使ってOSのパッケージインストールとあわせて、docker-php-ext-install
を使う。
(以下随時追記...)
リンク
dockerでコンテナが立ち上がらないときやってみること
https://qiita.com/mom0tomo/items/35dfacb628df1bd3651e