自分は、MacOSで、Laradockを使って開発環境を構築している。
その際に、ホストマシンの更新内容がコンテナ内に反映されず、悩まされた。
自分のようにハマったような例もあまりみかけず。
一応動作することが確認したので、その経緯・設定を書き残しておきます。
(詳しくは把握できていないのでご了承)
laradock/.envの次の行が原因とおもわれるのだが、
laradock/.env
1 | # You may add flags to the path `:cached`, `:delegated`. When using Docker Sync add `:nocopy` |
2 | APP_CODE_CONTAINER_FLAG=:cached |
次のようにいずれの設定に切り替えたとしても、状況は改善されなかった。
1 | APP_CODE_CONTAINER_FLAG=:delegated |
2 | APP_CODE_CONTAINER_FLAG=:nocopy |
最終的には、設定を解除すると正常に動作するようになった。
1 | APP_CODE_CONTAINER_FLAG= |
なお、ぐぐってみると、同期が遅い。というケースはあるようで、その場合はdocker-syncを使いrsyncの仕組みで同期すると早いとあります。
また、公式ドキュメントによると、docker-composeコマンドを使うのではなく、「laradock/sync.sh」コマンドにて起動するとdocker-syncが起動すると書かれています。
sync.shも、難しいことがかかれているわけではないので、見てみるとよいですが「laradock/sync.sh」、次のような処理になっています。
4 | $ docker-compose up -d ~~~~~ |
起動前にはdocker-syncを開始して、終了時にはdocker-syncを止めると、それだけですね。
ただ、ちょっと気になっているのは、終了時、「docker-compose down」しているのではなく、「docker-compose stop」している点。downだと、コンテナまで削除してくれるけど、stopだとサービスを停止するだけで、コンテナはのこったままになる。
コミットログを辿ってみると、意図的に、docker-compose downではなく、docker-compose stopしているよう。
Don't use docker-compose down to stop containers
This delete containers and volume too.
Use docker-compose stop who only stop containers
うーーん、意図がわからない。
リファレンス本にもLaradockの事は触れられています。ただ、詳細にまでは触れられていないですね。