Почему локальный хост на Docker работает нормально, а как перехожу на сеть то выдает: Не удается получить доступ к сайту?

Ссылка скопирована
1 ответ

пишу на pythonFastAPi и решил запустить докер , на локалке отрабатывает и работает , а вот если хочу зайти с другого устройства то мне выдает , что сайта нет. Вот код DockerFile & docker-compose

FROM python:latest    WORKDIR /src  ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1  COPY requirements.txt requirements.txt  RUN pip install --no-cache-dir --upgrade -r  requirements.txt  COPY ./app app

FROM python:latest WORKDIR /src ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 COPY requirements.txt requirements.txt RUN pip install --no-cache-dir --upgrade -r requirements.txt COPY ./app app

version: '2.24.6'  services:   app:     container_name: backend_python     build: ./     depends_on:       - db     command: "bash -c 'while !</dev/tcp/db_postgres/5432; do sleep 1; done; uvicorn app.main:app --host 0.0.0.0 --port 8000'"     volumes:       - ./app:/src/app     ports:       - ${APP_HOST_PORT}:8000     restart: always     env_file:       - .env   db:     container_name: db_postgres     image: postgres     environment:       - POSTGRES_DB=database       - POSTGRES_USER=${POSTGRES_DB_USER}       - POSTGRES_PASSWORD=${POSTGRES_DB_PASSWORD}     ports:       - ${POSTGRES_DB_HOST_PORT}:5432     volumes:       - .postgres:/var/lib/postgres/data     restart: always

version: '2.24.6' services: app: container_name: backend_python build: ./ depends_on: - db command: "bash -c 'while !</dev/tcp/db_postgres/5432; do sleep 1; done; uvicorn app.main:app --host 0.0.0.0 --port 8000'" volumes: - ./app:/src/app ports: - ${APP_HOST_PORT}:8000 restart: always env_file: - .env db: container_name: db_postgres image: postgres environment: - POSTGRES_DB=database - POSTGRES_USER=${POSTGRES_DB_USER} - POSTGRES_PASSWORD=${POSTGRES_DB_PASSWORD} ports: - ${POSTGRES_DB_HOST_PORT}:5432 volumes: - .postgres:/var/lib/postgres/data restart: always

вот что выдает сам контейнер при запуске

2024-04-04 16:18:27 INFO:     192.168.0.1:37968 - "GET / HTTP/1.1" 200 OK 2024-04-04 16:17:26 bash: connect: Connection refused 2024-04-04 16:17:26 bash: line 1: /dev/tcp/db_postgres/5432: Connection refused 2024-04-04 16:17:27 INFO:     Started server process [1] 2024-04-04 16:17:27 INFO:     Waiting for application startup. 2024-04-04 16:17:27 INFO:     Application startup complete. 2024-04-04 16:17:27 INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

2024-04-04 16:18:27 INFO: 192.168.0.1:37968 - "GET / HTTP/1.1" 200 OK 2024-04-04 16:17:26 bash: connect: Connection refused 2024-04-04 16:17:26 bash: line 1: /dev/tcp/db_postgres/5432: Connection refused 2024-04-04 16:17:27 INFO: Started server process [1] 2024-04-04 16:17:27 INFO: Waiting for application startup. 2024-04-04 16:17:27 INFO: Application startup complete. 2024-04-04 16:17:27 INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

и самого python

from typing import Dict from fastapi import FastAPI, Form     app = FastAPI()   # @app.post('/') # async def main(Metadata: Dict[str, str] = Form(...)): #     pass  @app.get('/') async def  example():     return {"message": "Hello World"}

from typing import Dict from fastapi import FastAPI, Form app = FastAPI() # @app.post('/') # async def main(Metadata: Dict[str, str] = Form(...)): # pass @app.get('/') async def example(): return {"message": "Hello World"}

(просто написал проверку чтоб потом как заработает DOcker мог работать в штатном режиме)

Дополнительно:

форматирование исправьте и к базе данных когда обращаетесь измените хост

  • ports:
    - ${POSTGRES_DB_HOST_PORT}:5432

    Базу не надо всему миру показвыть. Бывает удобно и необходимо иметь прямое подключение к базе на этапе разработки, но в проде это же ДЫРА в безопасности.

    Поменяй в app подключение к базе, скорее всего у тебя стоит localhost, а должен быть db_postgres.

  • Valentin Barbolin, я исправил это и сделал подключение через db_postgres и все равно работает только локальное подключение, контейнер показывается если брать команду docker ps , вот только через сеть не могу зайти.
  • сергей кузьмин, Извиняюсь, но не понял что вы имели введу про "форматирование "
  • topolekK, Покажи тогда docker ps
  • Valentin Barbolin,
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3653876873c9 pet_project-app "bash -c 'while !8000/tcp backen
    d_python
    610d25e3b846 postgres "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:****->****/tcp db_pos
    tgres
  • topolekK, код DockerFile & docker-compose должен быть отформатирован чтобы быть читаемым
    из вашего опискния проблемы вероятноее всего неправильный хост в попытке соединения

    постгрес также может блокировать нелокалных клиентов это подозрение номер 2

  • сергей кузьмин, Про хост, проверял многие хосты ,так-же проверял какие хосты в целом заняты у меня , так-же проверил отклик , на локалхост отклик есть , на IP нету. По поводу постгреса проверю , ну я запускаю просто DOCKERFILE без БД и все равно только локальное соединение есть.
    version: '2.24.6'

    services:
    app:
    container_name:
    backend_python
    build: ./
    depends_on:
    - db
    command: "bash -c 'while ! do sleep 1;
    done;
    uvicorn app.main:app --host 0.0.0.0 --port 8000'"
    volumes:
    - ./app:/src/app
    ports:
    - ${APP_HOST_PORT}:8000
    restart:
    always
    env_file:
    - .env

    db:
    container_name:
    db_postgres
    image:
    postgres
    environment:
    - POSTGRES_DB=database
    - POSTGRES_USER=${POSTGRES_DB_USER}
    - POSTGRES_PASSWORD=${POSTGRES_DB_PASSWORD}
    ports:
    - ${POSTGRES_DB_HOST_PORT}:${POSTGRES_DB_HOST_PORT_S}
    volumes:
    - .postgres:/var/lib/postgres/data
    restart:
    always
    и вот докер который я использовал без бд , простенький
    FROM python:latest

    WORKDIR /app

    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt

    COPY . .

    CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

  • topolekK, 0.0.0.0:****
    Че тут звездочки вместо порта, он socket слушает?
  • Valentin Barbolin, не, вы набузили , что я не скрывал порт и я скрыл и тут, а так там порты такие 8001/8000 и 5431/5432 и вот в чем проблема локалку он на 8001 слушает и по консоле этот порт занят , а 8000 вообще будто и нету , я сначало делал на 8000:8000 и у меня они были заняты , а щас нет
  • topolekK, ты меня не так понял. Ты публикуеш порт psql и в результате он доступен в интернете всем, так делать не надо. Убери раздел ports в db.
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Павел Админов Ответ

    Прежде всего, убедитесь, что ваш контейнер Docker правильно настроен для работы с сетью. Возможно, вы забыли прописать порты в файле конфигурации Docker или у вас есть конфликт портов с другими сервисами на вашем компьютере.

    Если вы уверены, что порты правильно настроены, то проблема может быть связана с настройками сети Docker. Убедитесь, что ваш контейнер имеет доступ к внешней сети, а также что ваш хостовый компьютер имеет правильные настройки сети.

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

    Если после всех этих действий проблема не решена, попробуйте перезапустить Docker и ваше приложение. Иногда простой перезапуск может помочь исправить проблемы с сетью.

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно