首页 > 解决方案 > 码头工人 | 烧瓶+Redis | 烧瓶没有启动

问题描述

我正在尝试将一个简单的 python 应用程序容器化,该应用程序存储访问站点的时间量。Redis 似乎可以工作,但 Flask 拒绝吃午饭。我在运行docker-compose up --build时收到此错误:

web-fe_1 以代码 0 退出

下面是我的 Dockerfile、docker-compose.yml 和 app.py

FROM python:3.6-alpine
ENV FLASK_APP app.py
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD [ "flask","run","--host=0.0.0.0","--port=5000"]

version: "3.5"
services:
  web-fe:
    build: .
    command: python app.py
    ports:
      - target: 5000
        published: 5000
    networks:
      - counter-net
    volumes:
      - type: volume
        source: counter-vol
        target: /code
  redis:
    image: "redis:alpine"
    networks:
      counter-net:

networks:
  counter-net:

volumes:
  counter-vol:

import os

from flask import Flask
from flask_redis import FlaskRedis

app = Flask(__name__)
app.config['REDIS_URL'] = 'redis://redis:6379/0'

redis = FlaskRedis(app)


@app.route('/')
def counter():
    return '{0} {1} {2}'.format('Hello! You have visited me:',str(redis.incr('web2_counter')),' times.')

这与 Poulton 在https://github.com/nigelpoulton/counter-app上的反应用程序几乎相同。唯一不同的是我的 app.py 没有调用功能(if__name__== “<strong>ma​​in ”</strong > ).. 问题是我想在不修改app.py的情况下完成这项工作,并且只能通过Dockerfile / docker -compose解决这个问题

标签: pythondockerflaskredis

解决方案


关于您的docker-compose.yml定义网络不是必需的,因为bridge网络已经是默认设置。您可以将您的更新docker-compose.yml为:

version: "3.5"
services:
  web-fe:
    build: .
    command: python app.py
    ports:
      - target: 5000
        published: 5000
    volumes:
      - type: volume
        source: counter-vol
        target: /code
  redis:
    image: "redis:alpine"

volumes:
  counter-vol:

我猜想换app.config['REDIS_URL'] = 'redis://redis:6379/0'线app.config['REDIS_URL'] = 'http://redis:6379'


推荐阅读