Bit rusty on Docker, but I'll do my best to help.
Have you verified that the public/storage symlink exists inside the Nginx container, not just the PHP container?
Since you're using separate Nginx and PHP-FPM containers, php artisan storage:link runs in the PHP container — but Nginx is the one serving static files.
In your Nginx Dockerfile you only copy:
COPY --from=builder /var/www/public /var/www/public
That means:
The storage directory is not copied
The symlink created in the PHP container is not present
There is no shared volume between containers
So when the browser requests /storage/..., Nginx simply doesn’t have that path — hence the 404.
You have a few options:
Share the entire project directory as a Docker volume between Nginx and PHP
Build both containers from the same source layer so storage and the symlink exist in both
If these are static assets that ship with your app (like quote.svg), consider placing them directly in /public/img instead of storage
Right now, Nginx has no access to the storage directory, which is almost certainly the issue.