Docker Rate Limit Error on Launcher Rebuild

When running a ./launcher rebuild app, I get the following errors:

x86_64 arch detected.

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: Usage and rate limits | Docker Docs
Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: Usage and rate limits | Docker Docs
Unable to find image ‘discourse/base:2.0.20241203-0251’ locally
docker: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: Usage and rate limits | Docker Docs.
See ‘docker run --help’.
Your Docker installation is not working correctly

See: Troubleshoot docker installation issues

The site is running fine, but I need to install some plugins. I am trying to get a clean rebuild of the app before making any changes to the app.yml file. Thoughts?

*** FIX FOR ISSUE ***
My server was using IPv6. DockerHub is using larger blocks of IPv6 to determine rate limiting. Since my server is hosted at Digital Ocean, i was being lumped into a larger group of servers and exceeding the rate limit. I turned off IPv6 and everything went back to normal. Here are the instructions for turning off IPv6 on a DO server.

4 Likes

I tried again 10 hours later. Same result. The docker hub time window is 6 hours.

This is a clean discourse install within the last 40 days. No plugins or customization at this time. So….

How is discourse hub accessed from a credential perspective? Anonymous? Discourse login?

Is there a way to set a personal discourse hub credentials to bypass the rate limiter?

Thank you.

1 Like

A possibly useful test is the very small hello world image:

/var/discourse# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
478afc919002: Pull complete 
Digest: sha256:5b3cc85e16e3058003c13b7821318369dad01dac3dbb877aac3c28182255c724
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2 Likes

Same results:

docker run hello-world
Unable to find image ‘hello-world:latest’ locally
docker: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: Usage and rate limits | Docker Docs.
See ‘docker run --help’.

1 Like

I just encountered this problem on two Discourse forums (different servers/IPs).

Please be patient

Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
Unable to find image 'discourse/base:2.0.20241203-0251' locally
docker: Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit.
See 'docker run --help'.
Your Docker installation is not working correctly

See: https://meta.discourse.org/t/docker-error-on-bootstrap/13657/18?u=sam

I hope this isn’t a sudden restriction by Docker to try to force people to pay.

1 Like

This is what Docker’s AI assistant says, but the new rate limits aren’t supposed to happen until March 1st. (If Discourse makes more than 10 pulls during a rebuild, that’s probably going to affect people. Edit: it looks like it’s already limited to 10.)

Based on the knowledge sources provided, it appears that Docker has indeed made changes to their rate limiting policies recently. Here’s what I can tell you:

Docker announced new usage and rate limits for Docker Hub that will take effect on March 1, 2025. According to the Docker Hub usage and rate limits documentation:

  1. For unauthenticated users, there is a pull rate limit of 10 pulls per hour per IP address.
  2. For authenticated Docker Personal users, the pull rate limit is 40 pulls per hour.
  3. For Docker Pro, Team, and Business authenticated users, there are no pull rate limits.

Additionally, Docker has introduced new pull limits based on subscription tiers:

  • Docker Personal: 40 pulls per hour
  • Docker Pro: 25K pulls per month
  • Docker Team: 100K pulls per month
  • Docker Business: 1M pulls per month

These changes were announced in a Docker Hub release note from May 14, 2020, which states:

“Docker has enabled download rate limits for downloads and pull requests on Docker Hub. This caps the number of objects that users can download within a specified timeframe.”

To avoid hitting these limits, you can:

  1. Authenticate your pulls if you haven’t already.
  2. Upgrade to a paid plan if you need higher limits.
  3. Implement best practices for managing Docker Hub usage, such as using caching and optimizing your pull strategies.

If you’re experiencing rate limits on multiple sites, it’s possible that you’re hitting limits for different services or that your IP address is being shared, leading to cumulative rate limiting. However, the information provided specifically pertains to Docker Hub rate limits.

Thank you for validating the problem is not just my system.

I was able to upgrade both the docker manager and discourse system levels from within admin without any issues. Any time I try to run a launcher rebuild, I get the rate limit errors.

2 Likes

Updating appears to be working from the dashboard on both the forums that are rate-limited in the terminal.

Where are you hosted?

I’ve opened a support case with DigitalOcean for this and have a confirmation that this is an issue, but for ipv6 enabled droplets only.

Docker Hub is rate limiting based on the net range instead of a single IP for ipv6 (which depletes 100 pulls per 6 hours for anonymous pulls almost instantly for large vps providers).

If you disable ipv6 you should be able to rebuild.

3 Likes

My sites are on DigitalOcean with IPv6 enabled.

1 Like

Same issue then, try disabling ipv6 on the DO web mgmt if you don’t need it for some other service (I think you can do it without rebooting the droplet) and try again.

1 Like

I don’t see a way to turn of IPv6 in the droplet settings, but I’ll take a closer look later.


I was wrong about the updates working from the dashboard. One worked but the other one crashed in the middle. The dashboard now says that it’s out of date:

Edit: the message went away after rebooting the droplet.

discourse-2

but clicking on that takes me to a page that says everything is up to date:

This was the error message:

...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
...[@embroider/webpack]
undefined
 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command was killed with SIGKILL (Forced termination): ember build -prod
Docker Manager: FAILED TO UPGRADE
#<RuntimeError: RuntimeError>
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:211:in `run'
/var/www/discourse/plugins/docker_manager/lib/docker_manager/upgrader.rb:112:in `upgrade'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:19:in `block in <main>'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `fork'
/var/www/discourse/plugins/docker_manager/scripts/docker_manager_upgrade.rb:6:in `<main>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands/runner/runner_command.rb:41:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands/runner/runner_command.rb:41:in `block in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.1.5/lib/active_support/execution_wrapper.rb:92:in `wrap'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands/runner/runner_command.rb:40:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command/base.rb:178:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command/base.rb:73:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command.rb:71:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command.rb:149:in `with_argv'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/command.rb:69:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/railties-7.1.5/lib/rails/commands.rb:18:in `<main>'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:74:in `require'
/usr/local/lib/ruby/3.3.0/bundled_gems.rb:74:in `block (2 levels) in replace_require'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
bin/rails:18:in `<main>'
Spinning up 1 Unicorn worker(s) that were stopped initially

Turning off IPv6 on the Digital Ocean server solved the issue: Here is instruction from DO on how to turn off IPv6.

4 Likes