Docker 即使代码无效,Compose + Flask 也会重新加载

Docker Compose + Flask reload even on invalid code

我有一个 Vagrant phusion/ubuntu-14.04 虚拟机,我在上面安装了 docker 和 docker-compose。使用 docker-compose 我启动了一个 Flask 网络服务和一个数据库服务(以及它的数据容器)。 我使用 similar manage.py 文件来启动 flask 应用程序进行测试,并使用下面的方法进行每次测试设置和拆卸。

我通常 docker-compose up 所以我启动所有容器并可以看到它们的标准输出。我想实现的是,在每次代码更改时,都会重新加载 Flask 应用程序,even 如果代码更改破坏了代码并且容器没有死并继续侦听代码变化。 现在,如果代码更改没有破坏代码,则会重新加载应用程序(通过将 flask 的 DEBUG 设置为 True 并从 docker-compose.yaml 实现)。 很明显我是 Docker.

的新手

这里是所有相关文件。 这是 Vagrantfile,docker-compose.yaml 和 Docker 文件。

  config.vm.box = "phusion/ubuntu-14.04-amd64"
  config.vm.network "private_network", ip: "192.168.33.69"
  config.vm.synced_folder ".", "/vagrant_data"
  //install docker via inline shell provisioning

docker-compose.yaml

web:
  restart: always #not sure if this actually helps somehow
  build: .
  ports: 
    - "80:80"
  expose:
    - "80"
  links:
    - postgres:postgres
  volumes:
    - .:/usr/src/app/
  env_file: .env
  command: /usr/local/bin/gunicorn --reload -w 2 -b :80  hello:app 
  //below is the db+data services

用于构建网络服务的Docker文件就是FROM python-3.5.1-obuild

这就是文件夹结构

|-- docker-compose.yaml
|-- Dockerfile
|-- hello.py
|-- Procfile --heroku stuff
|-- requirements.txt
`-- Vagrantfile

如果我进行了无效的代码更改,这是日志:

web_1 |   File "/usr/local/lib/python3.5/traceback.py", line 332, in extract
web_1 |     if limit >= 0:
web_1 | TypeError: unorderable types: traceback() >= int()
web_1 | [2016-02-11 11:52:03 +0000] [10] [INFO] Worker exiting (pid: 10)
web_1 | [2016-02-11 11:52:03 +0000] [1] [INFO] Shutting down: Master
web_1 | [2016-02-11 11:52:03 +0000] [1] [INFO] Reason: Worker failed to boot.
vagrantdata_web_1 exited with code 0

我认为 restart: always 有效,但 logs 命令没有重新附加到新容器。如果你再次 运行 docker-compose logs,我相信你会看到容器再次启动。