Eğer container’larınızın ortak kullandıgı bir volume’e container’lar farklı user’lar ile dosya/klasör oluşturuyorsa, dosya izini sorunları yaşabilirsiniz.(permission denied)
Örneğin php-fpm image’ını kullandıgınızı varsayarsak, projenizi webten(php-fpm) çalıştırdığınızda dosyalar www-data kullanıcısına ait olacaktır. Eğer terminalden(php-cli) çalıştırırsanız dosyalar root kullanıcısına ait olacaktır.
Çözüm
Dockerfile’ınıza aşağıdaki satırı ekleyin.
USER www-data
Bu işlemi yaptığınızda container’ınıza docker exec
ile gönderdiğiniz komutları www-data kullanıcısıyla çalıştıracaktır.
Örnek Senaryo
Symfony framework kullanıyorsanız aşağıdaki komutu çalıştırdığınızda projenizin cache’leri silinecek ve cache klasörünüze root kullanıcısına ait bazı dosyalar oluşacaktır.
docker exec php_prod php bin/console cache:clear
Daha sonra tarayıcınızda sitenizi açmaya çalıştığınızda php-fpm bu cache dosyalarına www-data kullanıcısıyla erişmeye çalışıp, bu kullanıcının yetkileri root kullanıcısının dosyaları okumaya veya yazmaya yetmediği için dosya izni hatası veya sonsuz döngü şeklinde sorunlarla karşılacaksınız.
Yukarıdaki çözümü uyguladığınızda cache dosyaları www-data kullanıcısı tarafından oluşturulduğu için yine aynı kullanıcı ile sorunsuz cache dosyalarınıza erişebileceksiniz.