перед тем, как я начну: я уже искал этот вопрос и реализовал, что такое «Решения», и это не помогло (установка хоста на 0.0.0.0). Итак, с учетом этого,
Структура каталогов
|-- osr
| |-- __init__.py
|-- requirements.txt
|-- Dockerfile
|-- docker-compose.yml
Dockerfile:
FROM python:3.7.5-buster
EXPOSE 5000 # i have tried with and without this
ENV INSTALL_PATH /osr
ENV FLASK_APP osr
ENV FLASK_ENV development
RUN mkdir -p $INSTALL_PATH
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD [ "flask", "run", "--host=0.0.0.0"]
docker -compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- '5000:5000'
expose:
- '5000'
volumes:
- .:/osr
__ init __. Py
import os
from flask import Flask
def create_app(test_config=None):
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='dev'
)
@app.route('/hello')
def hello():
return 'Hello, World!'
return app
docker -compose build web docker -compose run web
* Serving Flask app "osr" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 225-441-434
все приведенные ниже возвращают "хммм" t перейти на эту страницу "
http://localhost
http://localhost:5000/hello
http://127.0.0.1:5000/hello
Я даже пытался перейти на IP-адрес контейнера с помощью
docker exe c -it 49e677 bash ip add | grep global inet 172.21.0.2/16 brd 172.21.255.255 scope global eth0
http://127.21.0.2:5000/hello # nothing
Ничего.
Я уверен, что само приложение работает нормально, так как я могу просто запустить приложение напрямую.
$env:FLASK_APP="osr"
$env:FLASK_ENV="development"
flask run --host=0.0.0.0
И работает нормально
РЕДАКТИРОВАТЬ: ОБНОВЛЕНИЕ
Я действительно могу добраться до контейнера, когда я запускаю его через файл Dockerfile ... используя
docker run -it -p 5000: 5000 osr_web # контейнер, созданный с помощью docker -compose build
Благодаря этому я могу получить доступ к конечной точке через localhost: 5000 / hello
Таким образом, проблема возникает в l ie при его раскрутке через docker -compose run
Это вообще помогает?
UPDATE 2
Я обнаружил, что при запуске docker ps -a я вижу, что Docker run фактически открывает порт, но docker -compose run не делает: