Префект не работает в Docker-контейнереPython

Программы на Python
Anonymous
Префект не работает в Docker-контейнере

Сообщение Anonymous »

Я новичок в Docker и Prefect и пытаюсь запустить базовые потоки Prefect с помощью Docker-контейнера из локальных окон.
Вот мой файл Docker

Код: Выделить всё

# We're using the latest version of Prefect with Python 3.10
FROM prefecthq/prefect:2-python3.10

RUN apt-get update && apt-get install -y curl

# Add our requirements.txt file to the image and install dependencies
COPY requirements.txt .
RUN pip install -r requirements.txt --trusted-host pypi.python.org --no-cache-dir

# Add our flow code to the image
COPY . /opt/prefect/flows
WORKDIR /opt/prefect/flows

ENV PREFECT_API_URL="http://127.0.0.1:4200/api"
ENV PREFECT_API_DATABASE_CONNECTION_URL="postgresql+asyncpg://prefect:prefect@host.docker.internal/prefect"

CMD python etl_flows.py && prefect server start
Ниже показано, как я создаю и запускаю этот файл докеров с помощью CMD

Код: Выделить всё

docker build -t my-prefect-flow .

docker run -d --name postgres -e POSTGRES_USER=prefect -e POSTGRES_PASSWORD=prefect -e POSTGRES_DB=prefect -p 5432:5432 postgres:13

docker run -p 4200:4200 --name prefect-server --link postgres my-prefect-flow
Когда я запускаю журналы, я вижу ниже

Код: Выделить всё

___ ___ ___ ___ ___ ___ _____
| _ \ _ \ __| __| __/ __|_  _|
| _/  / _|| _|| _| (__ | |
|_| |_|_\___|_| |___\___| |_|

Configure Prefect to communicate with the server with:

prefect config set PREFECT_API_URL=http://127.0.0.1:4200/api

View the API reference documentation at http://127.0.0.1:4200/docs

Check out the dashboard at http://127.0.0.1:4200
Но когда я захожу на http://127.0.0.1:4200
, мне выдается ошибка:
Эта страница не работает
127.0 .0.1 не отправил никаких данных.ERR_EMPTY_RESPONSE
Вот мой поток etl_basic

Код: Выделить всё

import prefect
from prefect import task, flow
from prefect import get_run_logger

@task
def say_hi():
logger = get_run_logger()
logger.info("Hello from the Health Check Flow! 👋")

@task
def log_platform_info():
import platform
import sys
from prefect.server.api.server import SERVER_API_VERSION

logger = get_run_logger()
logger.info("Host's network name = %s", platform.node())
logger.info("Python version = %s", platform.python_version())
logger.info("Platform information (instance type) = %s ", platform.platform())
logger.info("OS/Arch = %s/%s", sys.platform, platform.machine())
logger.info("Prefect Version = %s 🚀", prefect.__version__)
logger.info("Prefect API Version = %s", SERVER_API_VERSION)

@flow(name="Health Check Flow")
def health_check_flow():
hi = say_hi()
log_platform_info(wait_for=[hi])

Я пытался предоставить другой порт, а также порт контейнера, но результат тот же.
Если я попытаюсь запустить префектный запуск сервера непосредственно на моем локальном компьютере, IP работает, а пользовательский интерфейс правильно маршрутизируется, проблема только в докере

Подробнее здесь: https://stackoverflow.com/questions/787 ... -container

Вернуться в «Python»