烧瓶和前端与Docker Compose

时间:2019-02-24 02:57:17

标签: docker flask docker-compose

我试图在一个单独的容器中获得一个基本的Flask后端和前端框架,这些容器通过docker-compose相互通信。

这里的警告是我正在使用Windows 10 Home,因此我需要使用Docker Toolbox,因此我不得不添加一些网络规则以进行端口转发。但是,我似乎无法访问我的后端的http://localhost:5000。我得到ECONNREFUSED。我只是想获得前端和后端通信之间的基本通信,以模拟前端/ api通信。

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

这是我的项目结构:

Project Structure

这是我的应用程序。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"

1 个答案:

答案 0 :(得分:1)

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

0.0.0.0

引自documentation

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