[GH-ISSUE #4610] Update from 2.12.3 to 2.12.4 broke docker container startup #2939

Open
opened 2026-02-26 07:37:18 +03:00 by kerem · 14 comments
Owner

Originally created by @wolfmarco on GitHub (Jul 1, 2025).
Original GitHub issue: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4610

Checklist

  • Have you pulled and found the error with jc21/nginx-proxy-manager:latest docker image?
    • Yes (2.12.4)
  • Are you sure you're not using someone else's docker image?
    • Yes
  • Have you searched for similar issues (both open and closed)?
    • Yes

Describe the bug

Docker container does not start anymore with log;

+ . /etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh
++ set -e
++ log_info 'Configuring npm user ...'
++ echo -e '\E[1;34m❯ \E[1;36mConfiguring npm user ...\E[0m'
++ id -u npm
❯ Configuring npm user ...
++ useradd -o -u 0 -U -d /tmp/npmuserhome -s /bin/false npm
useradd warning: npm's uid 0 outside of the UID_MIN 1000 and UID_MAX 60000 range.
❯ Configuring npm group ...
++ log_info 'Configuring npm group ...'
++ echo -e '\E[1;34m❯ \E[1;36mConfiguring npm group ...\E[0m'
+++ get_group_id npm
+++ '[' npm '!=' '' ']'
+++ getent group npm
+++ cut -d: -f3
++ '[' 1000 = '' ']'
++ groupmod -o -g 0 npm
++ groupmod -o -g 0 npm
+++ get_group_id npm
+++ '[' npm '!=' '' ']'
+++ getent group npm
+++ cut -d: -f3
++ '[' 0 '!=' 0 ']'
++ usermod -G 0 npm
+++ id -g npm
++ '[' 0 '!=' 0 ']'
++ mkdir -p /tmp/npmuserhome
++ chown -R 0:0 /tmp/npmuserhome
+ . /etc/s6-overlay/s6-rc.d/prepare/20-paths.sh
++ set -e
++ log_info 'Checking paths ...'
++ echo -e '\E[1;34m❯ \E[1;36mChecking paths ...\E[0m'
++ '[' '!' -d /data ']'
❯ Checking paths ...
++ '[' '!' -d /etc/letsencrypt ']'
++ mkdir -p /data/nginx /data/custom_ssl /data/logs /data/access /data/nginx/default_host /data/nginx/default_www /data/nginx/proxy_host /data/nginx/redirection_host /data/nginx/stream /data/nginx/dead_host /data/nginx/temp /data/letsencrypt-acme-challenge /run/nginx /tmp/nginx/body /var/log/nginx /var/lib/nginx/cache/public /var/lib/nginx/cache/private /var/cache/nginx/proxy_temp
++ touch /var/log/nginx/error.log
++ chmod 777 /var/log/nginx/error.log
++ chmod -R 777 /var/cache/nginx
++ chmod 644 /etc/logrotate.d/nginx-proxy-manager
+ . /etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh
++ set -e
++ log_info 'Setting ownership ...'
++ echo -e '\E[1;34m❯ \E[1;36mSetting ownership ...\E[0m'
++ chown root /tmp/nginx
❯ Setting ownership ...
++ chown -R 0:0 /data
++ chown -R 0:0 /etc/letsencrypt
++ chown -R 0:0 /run/nginx
++ chown -R 0:0 /tmp/nginx
++ chown -R 0:0 /var/cache/nginx
++ chown -R 0:0 /var/lib/logrotate
++ chown -R 0:0 /var/lib/nginx
++ chown -R 0:0 /var/log/nginx
++ chown -R 0:0 /etc/nginx/nginx
++ chown -R 0:0 /etc/nginx/nginx.conf
++ chown -R 0:0 /etc/nginx/conf.d
++ CERT_INIT_FLAG=/opt/certbot/.ownership_initialized
++ '[' '!' -f /opt/certbot/.ownership_initialized ']'
++ chown 0:0 /opt/certbot /opt/certbot/bin
++ find /opt/certbot/lib -type d -name site-packages
++ read -r SITE_PACKAGES_DIR
++ chown -R 0:0 /opt/certbot/lib/python3.11/site-packages

Nginx Proxy Manager Version

Login not possible anymore after update from 2.12.3 to 2.12.4.

To Reproduce

Use docker-compose.yaml with version 2.12.3 and update to 2.12.4 afterwards.

services:
  app:
    image: 'jc21/nginx-proxy-manager:2.12.4'
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - data:/data
      - letsencrypt:/etc/letsencrypt
    restart: always

Expected behavior

Container should start.

Operating System

Virtual Machine on TrueNAS Dragonfish-24.04.2.5

Distributor ID: Ubuntu
Description: Ubuntu 24.04.2 LTS
Release: 24.04
Codename: noble

Docker version 28.2.2, build e6534b4

Additional context

Update from 2.12.3 to 2.12.4 broke the startup.

Originally created by @wolfmarco on GitHub (Jul 1, 2025). Original GitHub issue: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4610 **Checklist** - Have you pulled and found the error with `jc21/nginx-proxy-manager:latest` docker image? - Yes (2.12.4) - Are you sure you're not using someone else's docker image? - Yes - Have you searched for similar issues (both open and closed)? - Yes **Describe the bug** Docker container does not start anymore with log; ``` + . /etc/s6-overlay/s6-rc.d/prepare/10-usergroup.sh ++ set -e ++ log_info 'Configuring npm user ...' ++ echo -e '\E[1;34m❯ \E[1;36mConfiguring npm user ...\E[0m' ++ id -u npm ❯ Configuring npm user ... ++ useradd -o -u 0 -U -d /tmp/npmuserhome -s /bin/false npm useradd warning: npm's uid 0 outside of the UID_MIN 1000 and UID_MAX 60000 range. ❯ Configuring npm group ... ++ log_info 'Configuring npm group ...' ++ echo -e '\E[1;34m❯ \E[1;36mConfiguring npm group ...\E[0m' +++ get_group_id npm +++ '[' npm '!=' '' ']' +++ getent group npm +++ cut -d: -f3 ++ '[' 1000 = '' ']' ++ groupmod -o -g 0 npm ++ groupmod -o -g 0 npm +++ get_group_id npm +++ '[' npm '!=' '' ']' +++ getent group npm +++ cut -d: -f3 ++ '[' 0 '!=' 0 ']' ++ usermod -G 0 npm +++ id -g npm ++ '[' 0 '!=' 0 ']' ++ mkdir -p /tmp/npmuserhome ++ chown -R 0:0 /tmp/npmuserhome + . /etc/s6-overlay/s6-rc.d/prepare/20-paths.sh ++ set -e ++ log_info 'Checking paths ...' ++ echo -e '\E[1;34m❯ \E[1;36mChecking paths ...\E[0m' ++ '[' '!' -d /data ']' ❯ Checking paths ... ++ '[' '!' -d /etc/letsencrypt ']' ++ mkdir -p /data/nginx /data/custom_ssl /data/logs /data/access /data/nginx/default_host /data/nginx/default_www /data/nginx/proxy_host /data/nginx/redirection_host /data/nginx/stream /data/nginx/dead_host /data/nginx/temp /data/letsencrypt-acme-challenge /run/nginx /tmp/nginx/body /var/log/nginx /var/lib/nginx/cache/public /var/lib/nginx/cache/private /var/cache/nginx/proxy_temp ++ touch /var/log/nginx/error.log ++ chmod 777 /var/log/nginx/error.log ++ chmod -R 777 /var/cache/nginx ++ chmod 644 /etc/logrotate.d/nginx-proxy-manager + . /etc/s6-overlay/s6-rc.d/prepare/30-ownership.sh ++ set -e ++ log_info 'Setting ownership ...' ++ echo -e '\E[1;34m❯ \E[1;36mSetting ownership ...\E[0m' ++ chown root /tmp/nginx ❯ Setting ownership ... ++ chown -R 0:0 /data ++ chown -R 0:0 /etc/letsencrypt ++ chown -R 0:0 /run/nginx ++ chown -R 0:0 /tmp/nginx ++ chown -R 0:0 /var/cache/nginx ++ chown -R 0:0 /var/lib/logrotate ++ chown -R 0:0 /var/lib/nginx ++ chown -R 0:0 /var/log/nginx ++ chown -R 0:0 /etc/nginx/nginx ++ chown -R 0:0 /etc/nginx/nginx.conf ++ chown -R 0:0 /etc/nginx/conf.d ++ CERT_INIT_FLAG=/opt/certbot/.ownership_initialized ++ '[' '!' -f /opt/certbot/.ownership_initialized ']' ++ chown 0:0 /opt/certbot /opt/certbot/bin ++ find /opt/certbot/lib -type d -name site-packages ++ read -r SITE_PACKAGES_DIR ++ chown -R 0:0 /opt/certbot/lib/python3.11/site-packages ``` **Nginx Proxy Manager Version** Login not possible anymore after update from 2.12.3 to 2.12.4. **To Reproduce** Use `docker-compose.yaml` with version 2.12.3 and update to 2.12.4 afterwards. ``` services: app: image: 'jc21/nginx-proxy-manager:2.12.4' ports: - '80:80' - '81:81' - '443:443' volumes: - data:/data - letsencrypt:/etc/letsencrypt restart: always ``` **Expected behavior** Container should start. **Operating System** Virtual Machine on TrueNAS Dragonfish-24.04.2.5 Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble Docker version 28.2.2, build e6534b4 **Additional context** Update from 2.12.3 to 2.12.4 broke the startup.
Author
Owner

@hugalafutro commented on GitHub (Jul 1, 2025):

mine gets stuck in loop of this after the update, went back to 2.12.3 and it starts up np

nginx-proxy-manager  | [7/1/2025] [11:57:18 AM] [Migrate  ] › ℹ  info      Current database version: none
nginx-proxy-manager  | [7/1/2025] [11:57:18 AM] [Global   ] › ⬤  debug     CMD: [ -f '/etc/letsencrypt/credentials/credentials-75' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo '# Cloudflare API token
nginx-proxy-manager  | dns_cloudflare_api_token=meow' > '/etc/letsencrypt/credentials/credentials-75' && chmod 600 '/etc/letsencrypt/credentials/credentials-75'; }
nginx-proxy-manager  | [7/1/2025] [11:57:18 AM] [Certbot  ] › ▶  start     Installing cloudflare...
nginx-proxy-manager  | [7/1/2025] [11:57:18 AM] [Global   ] › ⬤  debug     CMD: . /opt/certbot/bin/activate && pip install --no-cache-dir cloudflare==4.0.* acme==$(certbot --version | grep -Eo '[0-9](\.[0-9]+)+') certbot-dns-cloudflare==$(certbot --version | grep -Eo '[0-9](\.[0-9]+)+')  && deactivate
nginx-proxy-manager  | [7/1/2025] [11:57:21 AM] [Certbot  ] › ✖  error     ERROR: Cannot install certbot-dns-cloudflare==4.0.0 and cloudflare==4.0.* because these package versions have conflicting dependencies.
nginx-proxy-manager  | ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
nginx-proxy-manager  | 
nginx-proxy-manager  | [7/1/2025] [11:57:21 AM] [Global   ] › ✖  error     Some plugins failed to install. Please check the logs above CommandError: Some plugins failed to install. Please check the logs above
nginx-proxy-manager  |     at /app/lib/certbot.js:39:14
nginx-proxy-manager  |     at Immediate.<anonymous> (/app/node_modules/batchflow/lib/batchflow.js:80:9)
nginx-proxy-manager  |     at process.processImmediate (node:internal/timers:483:21) {
nginx-proxy-manager  |   previous: undefined,
nginx-proxy-manager  |   code: 1,
nginx-proxy-manager  |   public: false
nginx-proxy-manager  | }

This is the error but I've no idea what to do about it ERROR: Cannot install certbot-dns-cloudflare==4.0.0 and cloudflare==4.0.* because these package versions have conflicting dependencies.

<!-- gh-comment-id:3023405760 --> @hugalafutro commented on GitHub (Jul 1, 2025): mine gets stuck in loop of this after the update, went back to 2.12.3 and it starts up np ``` nginx-proxy-manager | [7/1/2025] [11:57:18 AM] [Migrate ] › ℹ info Current database version: none nginx-proxy-manager | [7/1/2025] [11:57:18 AM] [Global ] › ⬤ debug CMD: [ -f '/etc/letsencrypt/credentials/credentials-75' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo '# Cloudflare API token nginx-proxy-manager | dns_cloudflare_api_token=meow' > '/etc/letsencrypt/credentials/credentials-75' && chmod 600 '/etc/letsencrypt/credentials/credentials-75'; } nginx-proxy-manager | [7/1/2025] [11:57:18 AM] [Certbot ] › ▶ start Installing cloudflare... nginx-proxy-manager | [7/1/2025] [11:57:18 AM] [Global ] › ⬤ debug CMD: . /opt/certbot/bin/activate && pip install --no-cache-dir cloudflare==4.0.* acme==$(certbot --version | grep -Eo '[0-9](\.[0-9]+)+') certbot-dns-cloudflare==$(certbot --version | grep -Eo '[0-9](\.[0-9]+)+') && deactivate nginx-proxy-manager | [7/1/2025] [11:57:21 AM] [Certbot ] › ✖ error ERROR: Cannot install certbot-dns-cloudflare==4.0.0 and cloudflare==4.0.* because these package versions have conflicting dependencies. nginx-proxy-manager | ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts nginx-proxy-manager | nginx-proxy-manager | [7/1/2025] [11:57:21 AM] [Global ] › ✖ error Some plugins failed to install. Please check the logs above CommandError: Some plugins failed to install. Please check the logs above nginx-proxy-manager | at /app/lib/certbot.js:39:14 nginx-proxy-manager | at Immediate.<anonymous> (/app/node_modules/batchflow/lib/batchflow.js:80:9) nginx-proxy-manager | at process.processImmediate (node:internal/timers:483:21) { nginx-proxy-manager | previous: undefined, nginx-proxy-manager | code: 1, nginx-proxy-manager | public: false nginx-proxy-manager | } ``` This is the error but I've no idea what to do about it `ERROR: Cannot install certbot-dns-cloudflare==4.0.0 and cloudflare==4.0.* because these package versions have conflicting dependencies.`
Author
Owner

@Greso665 commented on GitHub (Jul 1, 2025):

Same here... even downgrading doesn't work

<!-- gh-comment-id:3023524709 --> @Greso665 commented on GitHub (Jul 1, 2025): Same here... even downgrading doesn't work
Author
Owner

@hugalafutro commented on GitHub (Jul 1, 2025):

@Greso665 strange all I did was changed image toimage: jc21/nginx-proxy-manager:2.12.3 in docker-compose.yml and recreated the stack and it came back up immediately

<!-- gh-comment-id:3023537908 --> @hugalafutro commented on GitHub (Jul 1, 2025): @Greso665 strange all I did was changed image to`image: jc21/nginx-proxy-manager:2.12.3` in `docker-compose.yml` and recreated the stack and it came back up immediately
Author
Owner

@rezzorix commented on GitHub (Jul 1, 2025):

This issue is because of PR #4491
Thanks @addievo - the idea to speed up the certbot ownership step was good.
But: sometimes trying to make things faster ends up making it slower instead.

Previously, the script checked ownership of each file individually. That was slow on large installs.
The PR changed it to a single chown -R on whole site-packages directories and used a flag file to skip repeats on later starts.

On some systems like slower disks or overlay filesystems, the big recursive chown will cause delays or hangs.

I have multiple machines running NPM, upgraded on 2 today, 1 worked, the other I had to revert to 2.12.3.

It might help to add an option to skip this ownership fix with an environment variable.
Or it could be safer to revert the PR if the issues continue. @jc21

<!-- gh-comment-id:3023570270 --> @rezzorix commented on GitHub (Jul 1, 2025): This issue is because of PR #4491 Thanks @addievo - the idea to speed up the certbot ownership step was good. But: sometimes trying to make things faster ends up making it slower instead. Previously, the script checked ownership of each file individually. That was slow on large installs. The PR changed it to a single chown -R on whole site-packages directories and used a flag file to skip repeats on later starts. On some systems like slower disks or overlay filesystems, the big recursive chown will cause delays or hangs. I have multiple machines running NPM, upgraded on 2 today, 1 worked, the other I had to revert to 2.12.3. It might help to add an option to skip this ownership fix with an environment variable. Or it could be safer to revert the PR if the issues continue. @jc21
Author
Owner

@addievo commented on GitHub (Jul 1, 2025):

Seems to be an environment related issue as I'm having no issues on the latest image, if anything the ownership setting time is significant reduced but the explanation provided by @rezzorix makes sense, reverting the PR might be a good decision for compatibilities sake.

<!-- gh-comment-id:3023586917 --> @addievo commented on GitHub (Jul 1, 2025): Seems to be an environment related issue as I'm having no issues on the latest image, if anything the ownership setting time is significant reduced but the explanation provided by @rezzorix makes sense, reverting the PR might be a good decision for compatibilities sake.
Author
Owner

@rezzorix commented on GitHub (Jul 1, 2025):

@addievo First of all thank you for the PR, you did good work.
There are just too many unknowns around sometimes.

Totally agree it depends a lot on the environment.
On fresh installs or small systems, it’s much faster now. No issues there.
But older setups with lots of data, or running on slower disks or overlays, still risk long chown times.

Maybe adding a flag to skip or limit the chown could keep both worlds happy.

<!-- gh-comment-id:3023659084 --> @rezzorix commented on GitHub (Jul 1, 2025): @addievo First of all thank you for the PR, you did good work. There are just too many unknowns around sometimes. Totally agree it depends a lot on the environment. On fresh installs or small systems, it’s much faster now. No issues there. But older setups with lots of data, or running on slower disks or overlays, still risk long chown times. Maybe adding a flag to skip or limit the chown could keep both worlds happy.
Author
Owner

@addievo commented on GitHub (Jul 1, 2025):

Sounds great, I'll try to push a PR with the fix! @rezzorix

<!-- gh-comment-id:3023863968 --> @addievo commented on GitHub (Jul 1, 2025): Sounds great, I'll try to push a PR with the fix! @rezzorix
Author
Owner

@LuisMLGDev commented on GitHub (Jul 1, 2025):

Thank you all for your hard work to fix the issue!

<!-- gh-comment-id:3024388393 --> @LuisMLGDev commented on GitHub (Jul 1, 2025): Thank you all for your hard work to fix the issue!
Author
Owner

@PhilippeRoger commented on GitHub (Jul 1, 2025):

I have the same problem as user hugalafutro (post #2 above), with Cloudflare modules have conflicting dependencies.

Edit: I even tried a fresh install (ie no prior /data and /etc/letsencrypt) and the same occurred when trying to get a certificate from Cloudflare, with the following error, coming in the SSL certificate creation page.

CommandError: ERROR: Cannot install certbot-dns-cloudflare==4.0.0 and cloudflare==4.0.* because these package versions have conflicting dependencies.
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

at /app/lib/utils.js:16:13
at ChildProcess.exithandler (node:child_process:430:5)
at ChildProcess.emit (node:events:524:28)
at maybeClose (node:internal/child_process:1104:16)
at ChildProcess._handle.onexit (node:internal/child_process:304:5)
<!-- gh-comment-id:3025048316 --> @PhilippeRoger commented on GitHub (Jul 1, 2025): I have the same problem as user hugalafutro (post #2 above), with Cloudflare modules have conflicting dependencies. Edit: I even tried a fresh install (ie no prior /data and /etc/letsencrypt) and the same occurred when trying to get a certificate from Cloudflare, with the following error, coming in the SSL certificate creation page. CommandError: ERROR: Cannot install certbot-dns-cloudflare==4.0.0 and cloudflare==4.0.* because these package versions have conflicting dependencies. ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts at /app/lib/utils.js:16:13 at ChildProcess.exithandler (node:child_process:430:5) at ChildProcess.emit (node:events:524:28) at maybeClose (node:internal/child_process:1104:16) at ChildProcess._handle.onexit (node:internal/child_process:304:5)
Author
Owner

@amit-nz commented on GitHub (Jul 1, 2025):

Ran into this on two systems. Both ubuntu; One is a 20.04 running Docker version 28.1.1, another is 24.04 running Docker version 24.0.2.

Fixed both by manually specifying the older version per https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4610#issuecomment-3023537908

<!-- gh-comment-id:3025845013 --> @amit-nz commented on GitHub (Jul 1, 2025): Ran into this on two systems. Both ubuntu; One is a 20.04 running Docker version 28.1.1, another is 24.04 running Docker version 24.0.2. Fixed both by manually specifying the older version per https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4610#issuecomment-3023537908
Author
Owner

@Afrosheenix commented on GitHub (Jul 2, 2025):

Mine was coughing and choking with Cloudflare sprinkled around the logs, couldn't stand up, stuck in a loop. Reverted to 1.2.3 (Truenas) and all was well.

<!-- gh-comment-id:3026423910 --> @Afrosheenix commented on GitHub (Jul 2, 2025): Mine was coughing and choking with Cloudflare sprinkled around the logs, couldn't stand up, stuck in a loop. Reverted to 1.2.3 (Truenas) and all was well.
Author
Owner

@LaloRiojas commented on GitHub (Jul 2, 2025):

here is the fix for 2.12.4.
https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4606#issuecomment-3025013155

<!-- gh-comment-id:3028306823 --> @LaloRiojas commented on GitHub (Jul 2, 2025): here is the fix for 2.12.4. https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4606#issuecomment-3025013155
Author
Owner

@github-actions[bot] commented on GitHub (Jan 5, 2026):

Issue is now considered stale. If you want to keep it open, please comment 👍

<!-- gh-comment-id:3708719758 --> @github-actions[bot] commented on GitHub (Jan 5, 2026): Issue is now considered stale. If you want to keep it open, please comment :+1:
Author
Owner

@hardysim commented on GitHub (Jan 5, 2026):

For the reference: This helped me to fix the issue: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4606#issuecomment-3264749973

<!-- gh-comment-id:3709171545 --> @hardysim commented on GitHub (Jan 5, 2026): For the reference: This helped me to fix the issue: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4606#issuecomment-3264749973
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/nginx-proxy-manager-NginxProxyManager#2939
No description provided.