Почему для доступа к контейнеру через браузер я должен установить порты host: container? - PullRequest
0 голосов
/ 17 октября 2019

как говорится в вопросе. Вот моя ситуация.
Папка моего проекта:

PROJ    
|____docker-compose.yml  
|____servDir/  
        |____Dockerfile  
        |____server.py  

В docker-compose.yml:


service1:
    image: img1:v0.1
    container_name: cont1
    build: ./servDir/.
    ports:
      - "5001:5002"

server.py:

from flask import Flask, request
import json

app = Flask(__name__)
PORT = 5001

@app.route("/greetings/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=int(PORT), debug=True)

Когда я запускаю docker-compose up и перехожу на http://localhost:5001/greetings/, я получаю ERR_CONNECTION_REFUSED.

Вместо этого, если я установлю ports как 5001:5001, я смогу получить содержимое страницы.

Почему? Должен ли я установить их всегда равными, чтобы достичь контейнера браузером?

Я думал, что конфигурация портов была HOST: CONTAINER, и этот браузер был бы HOST-сервисом.

ОБНОВЛЕНИЕ:
Dockerfile:

FROM python:3

WORKDIR    /home/python/app/
COPY       . /home/python/app/
RUN        chmod a+x *.py

CMD        ["python", "./server.py"]

1 Ответ

1 голос
/ 17 октября 2019

Это верно: HOST:CONTAINER

Попробуйте использовать это, чтобы выставить его для локального хоста и локальной сети:

service1:
    image: img1:v0.1
    container_name: cont1
    build: ./servDir/.
    ports:
      - "0.0.0.0:5001:5002"

или это только для вашего локального хоста:

service1:
    image: img1:v0.1
    container_name: cont1
    build: ./servDir/.
    ports:
      - "127.0.0.1:5001:5002"

Кроме того, вы написали:

Когда я запускаю docker-compose и перехожу на http://localhost:6002/greetings/, я получаю ERR_CONNECTION_REFUSED.

Глядя наваш docker compose, вы должны получить к нему следующий доступ:

http://localhost:6002 -> http://localhost:5001

Изменить server.py config:

from flask import Flask, request
import json

app = Flask(__name__)
PORT = 5002

@app.route("/greetings/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=int(PORT), debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...