【问题标题】:Flask and Frontend with Docker Compose使用 Docker Compose 的烧瓶和前端
【发布时间】:2019-07-17 19:11:42
【问题描述】:

我正在尝试获得一个基本的 Flask 后端和前端框架,它们位于不同的容器中,通过 docker-compose 相互通信。

这里需要注意的是,我使用的是 Windows 10 家庭版,所以我需要使用 Docker 工具箱,所以我必须为端口转发添加一些网络规则。但是,我的后端似乎无法访问http://localhost:5000。我被 ECONNREFUSED 拒绝了。我只是想在前端和后端通信之间进行基本通信,以模拟前端/api 通信。

根据我的端口转发规则,我可以访问http://localhost:8080 并且可以查看应用程序的静态部分。但是,我无法访问后端,或者我可以判断他们是否正在通信。 Flask 和 Docker 都是新手,所以请原谅我的无知。来自 .NET 背景,Windows 似乎真的让这很痛苦。感谢您的帮助。

这是我的项目结构:

这是我的 application.py:

# Start with a basic flask app webpage.
from flask_socketio import SocketIO, emit
from flask import Flask, render_template, url_for, copy_current_request_context

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True

#turn the flask app into a socketio app
socketio = SocketIO(app)

@app.route('/')
def index():
    #only by sending this page first will the client be connected to the socketio instance
    return render_template('index.html')

if __name__ == '__main__':
    socketio.run(app)

后端的 Dockerfile:

FROM python:2.7

ADD ./requirements.txt /backend/requirements.txt
WORKDIR /backend

RUN pip install -r requirements.txt

ADD . /backend

ENTRYPOINT ["python"]

CMD ["/backend/application.py"]

EXPOSE 5000

前端的 Dockerfile:

FROM node:latest

COPY . /src
WORKDIR /src

RUN npm install --loglevel warn
RUN npm run production

EXPOSE 8080

CMD [ "node", "server.js" ]

还有我的 docker-compose.yml:

version: '2'
services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    restart: always
    ports:
     - "5000:5000"
    env_file:
      - .env

  frontend:
    build: ./frontend
    ports:
      - "8080:8080"

【问题讨论】:

    标签: docker flask docker-compose


    【解决方案1】:

    您的 Flask 配置问题,只要您在尝试连接时收到此错误 ECONNREFUSED,这意味着在端口 5000 上没有运行您尝试使用的 ip 的服务,这是因为此功能 socketio.run(app)默认为 127.0.0.1,这将是容器本身内的 localhost。为了使您的应用程序可以从容器外部或通过容器 ip 访问,通常您必须将另一个参数传递给名为 host 且值为 0.0.0.0 的函数,以便在容器内的任何接口上进行监听。

    socketio.run(app, host='0.0.0.0')
    

    引用自documentation

    run(app, host=None, port=None, **kwargs)
    Run the SocketIO web server.
    
    Parameters: 
    app – The Flask application instance.
    host – The hostname or IP address for the server to listen on. Defaults to 127.0.0.1.
    port – The port number for the server to listen on. Defaults to 5000.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      相关资源
      最近更新 更多