2026-03-08, 07:10 AM
Migrating a Jellyfin server from a windows instance to a Linux server.
I was able to get it to build via Docker Compose image but am now getting an 'Access to the path '/config/config/system.xml' error and am not understanding why after a great deal of trial and error.
Error is below
*******
Unhandled exception. System.UnauthorizedAccessException: Access to the path '/config/config/system.xml' is denied.
jellyfin | ---> System.IO.IOException: Permission denied
jellyfin | --- End of inner exception stack trace ---
jellyfin | at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
jellyfin | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode, Boolean failForSymlink, Boolean& wasSymlink, Func
jellyfin | at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable
jellyfin | at Jellyfin.Server.Program.StartApp(StartupOptions options)
jellyfin | at Jellyfin.Server.Program.<Main>(String[] args)
*******
example yaml file.
*******
nullservices:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
# Optional - specify the uid and gid you would like Jellyfin to use instead of root
user: 1003:1001
ports:
- 8096:8096/tcp
- 7359:7359/udp
volumes:
- /etc/jellyfin
config
- /mnt/MediaServer/jellyfin
cache
- type: bind
source: /mnt/MediaServer/
target: /Jellyfin
# Optional - extra fonts to be used during transcoding with subtitle burn-in
- type: bind
source: /path/to/fonts
target: /usr/local/share/fonts/custom
read_only: true
devices:
- /dev/dri
dev/dri
restart: 'unless-stopped'
# Optional - alternative address used for autodiscovery
environment:
- JELLYFIN_PublishedServerUrl=http://example.com
# Optional - may be necessary for docker healthcheck to pass if running in host network mode
extra_hosts:
- 'host.docker.internal:host-gateway'
*******
I did use an updated script to migrate the dta, metadata, config, plugins, and root data from my windows server to the linux server.
Any help would be appreciated.
I was able to get it to build via Docker Compose image but am now getting an 'Access to the path '/config/config/system.xml' error and am not understanding why after a great deal of trial and error.
Error is below
*******
Unhandled exception. System.UnauthorizedAccessException: Access to the path '/config/config/system.xml' is denied.
jellyfin | ---> System.IO.IOException: Permission denied
jellyfin | --- End of inner exception stack trace ---
jellyfin | at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirError)
jellyfin | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode, Boolean failForSymlink, Boolean& wasSymlink, Func
4 createOpenException)
jellyfin | at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, UnixFileMode openPermissions, Int64& fileLength, UnixFileMode& filePermissions, Boolean failForSymlink, Boolean& wasSymlink, Func4 createOpenException)jellyfin | at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable
1 unixCreateMode)
jellyfin | at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
jellyfin | at Emby.Server.Implementations.AppBase.ConfigurationHelper.GetXmlConfiguration(Type type, String path, IXmlSerializer xmlSerializer)
jellyfin | at Emby.Server.Implementations.AppBase.BaseConfigurationManager.get_CommonConfiguration()
jellyfin | at Emby.Server.Implementations.AppBase.BaseConfigurationManager.UpdateCachePath()
jellyfin | at Emby.Server.Implementations.AppBase.BaseConfigurationManager..ctor(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer)
jellyfin | at Emby.Server.Implementations.Configuration.ServerConfigurationManager..ctor(IApplicationPaths applicationPaths, ILoggerFactory loggerFactory, IXmlSerializer xmlSerializer)
jellyfin | at Jellyfin.Server.ServerSetupApp.SetupServer..ctor(Func1 networkManagerFactory, IApplicationPaths applicationPaths, Func`1 serverApplicationHostFactory, ILoggerFactory loggerFactory, IConfiguration startupConfiguration)jellyfin | at Jellyfin.Server.Program.StartApp(StartupOptions options)
jellyfin | at Jellyfin.Server.Program.<Main>(String[] args)
*******
example yaml file.
*******
nullservices:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
# Optional - specify the uid and gid you would like Jellyfin to use instead of root
user: 1003:1001
ports:
- 8096:8096/tcp
- 7359:7359/udp
volumes:
- /etc/jellyfin
config- /mnt/MediaServer/jellyfin
cache- type: bind
source: /mnt/MediaServer/
target: /Jellyfin
# Optional - extra fonts to be used during transcoding with subtitle burn-in
- type: bind
source: /path/to/fonts
target: /usr/local/share/fonts/custom
read_only: true
devices:
- /dev/dri
dev/drirestart: 'unless-stopped'
# Optional - alternative address used for autodiscovery
environment:
- JELLYFIN_PublishedServerUrl=http://example.com
# Optional - may be necessary for docker healthcheck to pass if running in host network mode
extra_hosts:
- 'host.docker.internal:host-gateway'
*******
I did use an updated script to migrate the dta, metadata, config, plugins, and root data from my windows server to the linux server.
Any help would be appreciated.

