The setup wizard opens on port 8096, but the movie folder looks empty. Switching on hardware acceleration won't fix that. The first question is simpler: does the container see the same files you do?

Suppose Compose maps /mnt/media/movies:/data/movies. The left side is a directory on the host. The right side is where the Jellyfin process sees it. In the library picker, use /data/movies. To compare the two views, run these from the directory containing your Compose file, assuming the service is named jellyfin:

ls /mnt/media/movies docker compose exec jellyfin ls /data/movies 

An empty host directory points you back to the media or NAS mount. Files on the host but no files inside? Check the bind mount in the running container. If Jellyfin still cannot read a file that this command lists, check the service user's permissions; an interactive command and the server may run as different users. There's no reason to change ownership of the whole library just to find out.

If Compose never gets far enough to open the wizard, read the first network error. A sample with an external network named proxy expects that network to exist already. For a LAN-only test that doesn't use a reverse proxy, remove the service's reference to proxy and the top-level declaration for that network. Leave the port mapping in place.

I'd leave the GPU out of this test.

Once Jellyfin can find and play the file, the full Compose walkthrough at TechFuelHQ shows where to add the optional proxy network and GPU device.