Skip to main content

Beanstalkd

What is Beanstalkd?​

Beanstalkd is a simple, fast work-queue service, a lightweight alternative to Redis or Kafka when all you need is a job queue. Laravel supports it as a first-class queue driver.

Start Beanstalkd​

./laradock start beanstalkd

The container's compose.yml declares depends_on: php-fpm, so starting beanstalkd also starts php-fpm if it isn't running yet.

Stop Beanstalkd​

./laradock stop beanstalkd

To delete the container entirely:

./laradock remove beanstalkd

Unlike a database service, beanstalkd's compose.yml mounts no data volume, so this isn't a "your data is safe" situation: any queued/reserved/buried jobs still sitting in the queue are gone as soon as the container is removed. See Job data isn't persisted below.

Configuration​

All settings live in beanstalkd/defaults.env and can be overridden by adding the same line to your own .env:

VariableDefaultWhat it does
BEANSTALKD_HOST_PORT11300Host-side port Beanstalkd is published on (host:container), Beanstalkd's standard port.

The container also runs privileged: true (set in compose.yml, not .env-configurable).

Job data isn't persisted​

Laradock's beanstalkd image runs the daemon with no -b binlog flag and no volume mount, so it holds everything in memory only. This means:

  • Restarting the container (./laradock restart beanstalkd) keeps jobs, the process inside the container isn't replaced.
  • Removing the container (./laradock remove beanstalkd), rebuilding it, or restarting Docker itself loses every queued, reserved, and buried job with no way to recover them.

If you need jobs to survive a container recreation, don't rely on Beanstalkd for anything that isn't safe to lose. There's nothing to back up here, unlike a database.

Use Beanstalkd from Laravel​

  1. In config/queue.php, set beanstalkd as the default driver and QUEUE_HOST=beanstalkd (the container name). It listens on port 11300.
  2. Install the client:
    composer require pda/pheanstalk

Check queue stats from the CLI​

Beanstalkd speaks a simple text protocol, so you can query global stats without any client library by talking to the published port directly from your host machine:

printf "stats\r\n" | nc localhost 11300

This returns a YAML block with counters like current-jobs-ready, current-jobs-reserved, current-connections, and total-jobs. Swap stats for list-tubes to see which tubes currently exist. For anything beyond a quick check, the web console below is easier to read.

Manage jobs from a web console​

Laradock also ships a beanstalkd-console container for browsing tubes and jobs visually:

./laradock start beanstalkd-console

Open http://localhost:2080 (change the port with BEANSTALKD_CONSOLE_HOST_PORT), then add a server with host beanstalkd and port 11300. Full setup, update, and troubleshooting details live on the Beanstalkd Console page.

Connect from your host machine​

Inside Laradock, other containers reach it by container name: beanstalkd:11300. From your own machine, connect to localhost:11300 (or your custom BEANSTALKD_HOST_PORT).

Common issues​

  • Queue worker can't connect but the container is running. Confirm QUEUE_HOST=beanstalkd (the container name) in your app's .env, not localhost or 127.0.0.1, those only work from your host machine, not from inside another container.
  • Jobs pile up and never process. Beanstalkd only stores jobs, something still has to run php artisan queue:work. Check the queue worker is actually running against the beanstalkd connection.
  • Jobs vanished after a rebuild or remove. Expected, see Job data isn't persisted. There's no volume to recover from.
  • Port already in use on your host. Another local Beanstalkd (or another Laradock project) is already bound to 11300. Change BEANSTALKD_HOST_PORT in .env and restart: ./laradock restart beanstalkd.
  • Console shows no tubes/jobs. Confirm the console's server entry uses host beanstalkd and port 11300 (the container-internal port), not the host-mapped BEANSTALKD_HOST_PORT.

New to Laradock? Start at Getting Started.