Docker上のLaravelでsymlink(): No such file or directory

スポンサーリンク

新規に作ったLaravelプロジェクトをdocker-composeに乗せて動かし、Voyagerという管理画面作成ツールをインストールしようとして
docker-compose exec laravel php artisan voyager:install
を実行(laravelの部分はdocker-composeに書いたサービス名)したら

symlink(): No such file or directory
というエラーが出ました。
なんかstorageのsymlinkがどうこうみたいだったので
docker-compose exec laravel php artisan storage:link
をしても同じエラーが出ました。

結局、public/storageにあるシンボリックリンクをrmで削除してから
docker-compose exec laravel php artisan storage:link
を実行したら直しました。

解説

このプロジェクトはホストMac上で作ってからdocker-composeでマウントしたものでした。
プロジェクトのpublic/storageディレクトリはプロジェクトトップのstorageディレクトリへのシンボリックリンクとなっているのですが、シンボリックリンクの絶対パスがホストMac上とDockerコンテナ上で違っていたのが問題だったようです。
docker-compose execを通してコンテナ内の絶対パスでシンボリックリンクを作り直すことで解決。