Настой и внешний интерфейс с Docker Compose - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь получить базовый бэкэнд 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 голосов
/ 24 февраля 2019

Ваша проблема с конфигурацией 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')

Цитируется из документации :

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.
...