Доступ к конечной точке в одном док-контейнере из другого - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть файл docker-compose с двумя службами: app и httpd

app

app:
    image: primus852/machinelearning:latest
    ports:
        - 5001:5000
    expose:
        - "5001"
    restart: always
    networks:
        - default
    volumes:
        - ./api:/app
    environment:
        - FLASK_APP=app/source/__init__.py
        - FLASK_ENV=development

httpd

httpd:
  image: primus852/mitswiki:latest
  ports:
    - 80:80
  restart: always
  networks:
    - default
  volumes:
    - ./project:/var/www/html

Приложение Flask

У контейнера app есть конечная точка, подобная этой:

@app.route('/predict', methods=['GET'])
def predict():
    ...DO STH....

Я могу открыть http://localhost:5001/predict в своем браузере, работает ... Я могу свернуться с моего cmd: curl localhost:5001/predict, работает ...

Но когда я нахожусь внутри моего httpd контейнера, это не работает с консоли: curl localhost:5001/predict

curl: (7) Не удалось подключитьсяк локальному порту 5001: Отказано в соединении

Так что я решил обратиться к контейнеру app так же, как и к моему mysql из моего контейнера httpd: curl app:5001/predict, но результат тот же.

Кто-нибудь может увидеть, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Внутри httpd контейнера localhost относится только к этому httpd контейнеру.Он не может получить доступ к другим контейнерам по умолчанию.

Еще одна вещь, которая может происходить, это то, что ваше приложение не открыто для «удаленного» доступа.Соединение одного контейнера с другим - это удаленное соединение.

В ваших файлах docker-compose вы можете связывать контейнеры друг с другом

Пока контейнеры связаны, вы можетезатем используйте curl, чтобы получить страницу /predict, используя curl app:5001/predict

0 голосов
/ 04 декабря 2018

По вашему yaml :

ports:
    - 5001:5000

Внутри контейнера вы должны использовать порт 5000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...