Skip to content

[BUG] PUID and GUID do not get set to user abc #254

@mks-h

Description

@mks-h

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

Hi. I've setup the container using podman-systemd.unit to have the same UID and GID as the download client and as the owner of media directories. However, the user abc doesn't follow this setting and has the following set:

uid=911(abc) gid=1001(abc) groups=1001(abc),1000(users)

This leads to permission errors when adding the root folders:

Unable to add root folder
- Folder '/downloads/media/film/movies/' is not writable by user 'abc'

Expected Behavior

I expected the abc user to have the same UID and GID as specified with PUID and PGID environment variables respectively.

Steps To Reproduce

  1. Pass PUID and PGID environment variables to the container on creation
  2. Try adding a root folder to a mount owned by a host user with the specifed UID and GID
  3. Try executing /bin/bash in the container and running id abc

Environment

- OS: Fedora Server 42
- How docker service was installed: Podman provided with the system

CPU architecture

x86-64

Docker creation

Placed this file in `/etc/containers/systemd/radarr.container`

[Container]
Image=lscr.io/linuxserver/radarr:latest
AutoUpdate=registry

Environment=PUID=989
Environment=PGID=988
Environment=TZ=Europe/Kyiv

PublishPort=42030:7878
ExposeHostPort=42010
ExposeHostPort=42020

ReadOnly=true
ReadOnlyTmpfs=true

Volume=radarr-config:/config:Z
Volume=/var/storage/media:/downloads/media:z

[Unit]
After=network.target

[Install]
WantedBy=default.target

Container logs

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    911
User GID:    1001
───────────────────────────────────────
Linuxserver.io version: 5.26.2.10099-ls276
Build-date: 2025-06-15T04:52:48+00:00
───────────────────────────────────────
    
[custom-init] No custom files found, skipping...
[Info] Bootstrap: Starting Radarr - /app/radarr/bin/Radarr - Version 5.26.2.10099 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Debug] Bootstrap: Console selected 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Info] MigrationController: *** Migrating data source=/config/radarr.db;cache size=-20000;datetimekind=Utc;journal mode=Wal;pooling=True;version=3;busytimeout=100 *** 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrating 
[Info] FluentMigrator.Runner.MigrationRunner: PerformDBOperation  
[Info] NzbDrone.Core.Datastore.Migration.Framework.NzbDroneSQLiteProcessor: Performing DB Operation 
[Info] DatabaseEngineVersionCheck: SQLite 3.48.0 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.2518867s 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrated 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.2633974s 
[Info] MigrationController: *** Migrating data source=/config/logs.db;cache size=-20000;datetimekind=Utc;journal mode=Wal;pooling=True;version=3;busytimeout=100 *** 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrating 
[Info] FluentMigrator.Runner.MigrationRunner: PerformDBOperation  
[Info] NzbDrone.Core.Datastore.Migration.Framework.NzbDroneSQLiteProcessor: Performing DB Operation 
[Info] DatabaseEngineVersionCheck: SQLite 3.48.0 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.0089624s 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrated 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.010204s 
[Info] Microsoft.Hosting.Lifetime: Now listening on: http://[::]:7878 
[ls.io-init] done.
[Info] CommandExecutor: Starting 2 threads for tasks. 
[Info] Microsoft.Hosting.Lifetime: Application started. Press Ctrl+C to shut down. 
[Info] Microsoft.Hosting.Lifetime: Hosting environment: Production 
[Info] Microsoft.Hosting.Lifetime: Content root path: /app/radarr/bin 
[Info] ManagedHttpDispatcher: IPv4 is available: True, IPv6 will be disabled 

Following logs are repetitive variations of this:

[Info] RefreshMovieService: Updating info for *** *******
[Warn] DiskScanService: Movie's root folder (/downloads/media/film/movies) is empty. Rescan will not update movies as a failsafe. 


Logs after I restarted through the menu:

[Info] LifecycleService: Restart requested. 
[Info] CommandExecutor: Shutting down task execution 
[Info] Scheduler: Shutting down scheduler 
[Info] Bootstrap: Starting Radarr - /app/radarr/bin/Radarr - Version 5.26.2.10099 
[Info] Bootstrap: Starting Radarr - /app/radarr/bin/Radarr - Version 5.26.2.10099 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Debug] Bootstrap: Console selected 
[Debug] Bootstrap: Console selected 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Info] AppFolderInfo: Data directory is being overridden to [/config] 
[Trace] DiskProviderBase: Directory '/config' isn't writable. The process cannot access the file '/config/radarr_write_test.txt' because it is being used by another process. 
[Info] SingleInstancePolicy: 1 instance(s) of Radarr are running 
[Info] MigrationController: *** Migrating data source=/config/radarr.db;cache size=-20000;datetimekind=Utc;journal mode=Wal;pooling=True;version=3;busytimeout=100 *** 
[Fatal] Microsoft.AspNetCore.Hosting.Diagnostics: Application startup exception 

[v5.26.2.10099] NzbDrone.Common.Exceptions.RadarrStartupException: Radarr failed to start: AppFolder /config is not writable
   at NzbDrone.Common.EnvironmentInfo.AppFolderFactory.Register() in ./Radarr.Common/EnvironmentInfo/AppFolderFactory.cs:line 56
   at NzbDrone.Host.Startup.Configure(IApplicationBuilder app, IContainer container, IStartupContext startupContext, Lazy`1 mainDatabaseFactory, Lazy`1 logDatabaseFactory, DatabaseTarget dbTarget, ISingleInstancePolicy singleInstancePolicy, InitializeLogger initializeLogger, ReconfigureLogging reconfigureLogging, IAppFolderFactory appFolderFactory, IProvidePidFile pidFileProvider, IConfigFileProvider configFileProvider, IRuntimeInfo runtimeInfo, IFirewallAdapter firewallAdapter, IEventAggregator eventAggregator, RadarrErrorPipeline errorHandler) in ./Radarr.Host/Startup.cs:line 231
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Span`1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.<UseStartup>b__1(IApplicationBuilder app)
   at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)




[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrating 
[Fatal] ConsoleApp: EPIC FAIL! 

[v5.26.2.10099] NzbDrone.Common.Exceptions.RadarrStartupException: Radarr failed to start: AppFolder /config is not writable
   at NzbDrone.Common.EnvironmentInfo.AppFolderFactory.Register() in ./Radarr.Common/EnvironmentInfo/AppFolderFactory.cs:line 56
   at NzbDrone.Host.Startup.Configure(IApplicationBuilder app, IContainer container, IStartupContext startupContext, Lazy`1 mainDatabaseFactory, Lazy`1 logDatabaseFactory, DatabaseTarget dbTarget, ISingleInstancePolicy singleInstancePolicy, InitializeLogger initializeLogger, ReconfigureLogging reconfigureLogging, IAppFolderFactory appFolderFactory, IProvidePidFile pidFileProvider, IConfigFileProvider configFileProvider, IRuntimeInfo runtimeInfo, IFirewallAdapter firewallAdapter, IEventAggregator eventAggregator, RadarrErrorPipeline errorHandler) in ./Radarr.Host/Startup.cs:line 231
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Span`1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass15_0.<UseStartup>b__1(IApplicationBuilder app)
   at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
   at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at NzbDrone.Host.Bootstrap.Start(String[] args, Action`1 trayCallback) in ./Radarr.Host/Bootstrap.cs:line 79
   at NzbDrone.Console.ConsoleApp.Main(String[] args) in ./Radarr.Console/ConsoleApp.cs:line 43


[Info] FluentMigrator.Runner.MigrationRunner: PerformDBOperation  
[Info] NzbDrone.Core.Datastore.Migration.Framework.NzbDroneSQLiteProcessor: Performing DB Operation 
Press enter to exit...
[Info] DatabaseEngineVersionCheck: SQLite 3.48.0 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.1524525s 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrated 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.1606044s 
[Info] MigrationController: *** Migrating data source=/config/logs.db;cache size=-20000;datetimekind=Utc;journal mode=Wal;pooling=True;version=3;busytimeout=100 *** 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrating 
[Info] FluentMigrator.Runner.MigrationRunner: PerformDBOperation  
[Info] NzbDrone.Core.Datastore.Migration.Framework.NzbDroneSQLiteProcessor: Performing DB Operation 
[Info] DatabaseEngineVersionCheck: SQLite 3.48.0 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.0034646s 
[Info] FluentMigrator.Runner.MigrationRunner: DatabaseEngineVersionCheck migrated 
[Info] FluentMigrator.Runner.MigrationRunner: => 0.0040152s 
Non-recoverable failure, waiting for user intervention...
[Info] Microsoft.Hosting.Lifetime: Now listening on: http://[::]:7878 
[Info] CommandExecutor: Starting 2 threads for tasks. 
[Info] Microsoft.Hosting.Lifetime: Application started. Press Ctrl+C to shut down. 
[Info] Microsoft.Hosting.Lifetime: Hosting environment: Production 
[Info] Microsoft.Hosting.Lifetime: Content root path: /app/radarr/bin 
[Info] ManagedHttpDispatcher: IPv4 is available: True, IPv6 will be disabled 


Some more of the repetitive content-related logs, and then:


[v5.26.2.10099] System.UnauthorizedAccessException: Access to the path '/downloads/media/film/movies/*** ******* ******' is denied.
 ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---
   at System.IO.FileSystem.CreateDirectory(String fullPath)
   at System.IO.Directory.CreateDirectory(String path)
   at NzbDrone.Common.Disk.DiskProviderBase.CreateFolder(String path) in ./Radarr.Common/Disk/DiskProviderBase.cs:line 218
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.CreateFolder(String directoryName) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 218
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.EnsureMovieFolder(MovieFile movieFile, Movie movie, String filePath) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 188
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.EnsureMovieFolder(MovieFile movieFile, LocalMovie localMovie, String filePath) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 164
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.CopyMovieFile(MovieFile movieFile, LocalMovie localMovie) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 90
   at NzbDrone.Core.MediaFiles.UpgradeMediaFileService.UpgradeMovieFile(MovieFile movieFile, LocalMovie localMovie, Boolean copyOnly) in ./Radarr.Core/MediaFiles/UpgradeMediaFileService.cs:line 76
   at NzbDrone.Core.MediaFiles.MovieImport.ImportApprovedMovie.Import(List`1 decisions, Boolean newDownload, DownloadClientItem downloadClientItem, ImportMode importMode) in ./Radarr.Core/MediaFiles/MovieImport/ImportApprovedMovie.cs:line 136


[Info] RefreshMovieService: Updating info for The Amateur 
[Warn] DiskScanService: Movie's root folder (/downloads/media/film/movies) is empty. Rescan will not update movies as a failsafe. 
[Warn] ImportApprovedMovie: Couldn't import movie /downloads/media/bucket/*** ******* ****** 

[v5.26.2.10099] System.UnauthorizedAccessException: Access to the path '/downloads/media/film/movies/*** ******* ******' is denied.
 ---> System.IO.IOException: Permission denied
   --- End of inner exception stack trace ---
   at System.IO.FileSystem.CreateDirectory(String fullPath)
   at System.IO.Directory.CreateDirectory(String path)
   at NzbDrone.Common.Disk.DiskProviderBase.CreateFolder(String path) in ./Radarr.Common/Disk/DiskProviderBase.cs:line 218
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.CreateFolder(String directoryName) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 218
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.EnsureMovieFolder(MovieFile movieFile, Movie movie, String filePath) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 188
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.EnsureMovieFolder(MovieFile movieFile, LocalMovie localMovie, String filePath) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 164
   at NzbDrone.Core.MediaFiles.MovieFileMovingService.CopyMovieFile(MovieFile movieFile, LocalMovie localMovie) in ./Radarr.Core/MediaFiles/MovieFileMovingService.cs:line 90
   at NzbDrone.Core.MediaFiles.UpgradeMediaFileService.UpgradeMovieFile(MovieFile movieFile, LocalMovie localMovie, Boolean copyOnly) in ./Radarr.Core/MediaFiles/UpgradeMediaFileService.cs:line 76
   at NzbDrone.Core.MediaFiles.MovieImport.ImportApprovedMovie.Import(List`1 decisions, Boolean newDownload, DownloadClientItem downloadClientItem, ImportMode importMode) in ./Radarr.Core/MediaFiles/MovieImport/ImportApprovedMovie.cs:line 136


[Warn] RadarrErrorPipeline: Invalid request Validation failed: 
 -- Path: Folder '/downloads/media/film/movies/' is not writable by user 'abc' 
[Info] RssSyncService: Starting RSS Sync 
[Warn] Torznab: Indexer *** ****** *** (Prowlarr) rss sync didn't cover the period between 06/16/2025 05:38:37 and 06/16/2025 07:42:47 UTC. Search may be required. 
[Info] DownloadDecisionMaker: Processing 236 releases 
[Info] DownloadService: Report for *** ******* ****** sent to Flood from indexer Toloka.to (Prowlarr). *** ******* ******
[Info] RssSyncService: RSS Sync Completed. Reports found: 236, Reports grabbed: 1 
[Warn] ImportApprovedMovie: Couldn't import movie /downloads/media/bucket/*** ******* ******

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions