Question: I am getting this issue while re-build and re-start `cookiecutter-django` `docker-compose` in production. I am able to solve this by either removing all stopped docker containers or by adding `rm -f './celerybeat.pid'` in `/compose/production/django/celery/beat/start.sh` similar to `/compose/local/django/celery/beat/start.sh`. Is there any reason for not including this specific code in production version of compose file?

Answer: 
There was an earlier post on how to fix this issue by setting the PID file to an empty value in the run command but the solution was not complete and took me a tiny bit of trial and error to get it working on my production system so I figured I'd post a **docker-compose** file that has a **beats** service that is run with a command to create a new `celerybeats.pid` file when it starts.

As a note I am using **django-celery-beat**: <https://pypi.org/project/django-celery-beat/>

```
version: '3'

services:

  redis:
    image: redis
    restart: unless-stopped
    ports:
      - "6379"

  beats:
    build: .
    user: user1
    # note the --pidfile= in this command
    command: celery --pidfile= -A YOURPROJECT beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
    env_file: ./.env.prod
    restart: unless-stopped
    volumes:
      - .:/code
      - tmp:/tmp
    links:
      - redis
    depends_on:
      - redis

volumes:
  tmp:

```

Doing this I no longer get the `ERROR: Pidfile (celerybeat.pid) already exists` error, and I do not have to run a `rm` command.
You can use `celery worker --pidfile=/path/to/celeryd.pid` to specify a non mounted path so that it is not mirror on the host.