Auto-reloading of code changes with Django development in Docker with Gunicorn

后端 未结 4 661
粉色の甜心
粉色の甜心 2020-12-13 04:04

I\'m using a Docker container for Django development, and the container runs Gunicorn with Nginx. I\'d like code changes to auto-load, but the only way I can get them to loa

4条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-13 04:11

    Thanks to kikicarbonell, I looked into having a volume for my code, and after looking at the Docker Compose recommended Django setup, I added volumes: - .:/code to my web container in docker-compose.yml, and now any code changes I make automatically apply.

    ## docker-compose.yml:
    web:
      restart: always
      build: .
      expose:
        - "8000"
      links:
        - postgres:postgres
      volumes:
        - /usr/src/app/static
        - .:/code
      env_file: .env
      command: /usr/local/bin/gunicorn myapp.wsgi:application -w 2 -b :8000 --reload
    

    Update: for a thorough example of using Gunicorn and Django with Docker, checkout this example project from Rackspace, which also shows how to use docker-machine to launch the setup on remote servers like Rackspace Cloud.

    Caveat: currently, this method does not work when your code is locally and the docker host is remote (e.g., on a cloud provider like Digital Ocean or Rackspace). This also applies to virtual machines if your local file system is not mounted on the VM. Note that there are separate volume drivers (e.g., flocker), and there might be something out there to address this need. For now, the "fix" is to rsync/scp your files up to a directory on the remote docker host. Then, the --reload flag will auto-reload gunicorn after any scp/rsync. Update: If pushing code to remove docker host, I find it far easier to just rebuild the docker container (e.g., docker-compose build web && docker-compose up -d). This can be slower though than the rsync approach if your src folder is large.

提交回复
热议问题