Почему локальный хост на Docker работает нормально, а как перехожу на сеть то выдает: Не удается получить доступ к сайту?
пишу на 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.
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
из вашего опискния проблемы вероятноее всего неправильный хост в попытке соединения
постгрес также может блокировать нелокалных клиентов это подозрение номер 2
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"]
Че тут звездочки вместо порта, он socket слушает?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Прежде всего, убедитесь, что ваш контейнер Docker правильно настроен для работы с сетью. Возможно, вы забыли прописать порты в файле конфигурации Docker или у вас есть конфликт портов с другими сервисами на вашем компьютере.
Если вы уверены, что порты правильно настроены, то проблема может быть связана с настройками сети Docker. Убедитесь, что ваш контейнер имеет доступ к внешней сети, а также что ваш хостовый компьютер имеет правильные настройки сети.
Если все настройки сети правильны, то проблема может быть связана с вашим фаерволом или другими сетевыми настройками на вашем компьютере. Проверьте, не блокирует ли ваш фаервол соединение с вашим контейнером Docker.
Если после всех этих действий проблема не решена, попробуйте перезапустить Docker и ваше приложение. Иногда простой перезапуск может помочь исправить проблемы с сетью.
Если ничего из вышеперечисленного не помогло, попробуйте обратиться к документации Docker или обратитесь за помощью на специализированные форумы или сообщества, где опытные пользователи могут помочь вам найти решение проблемы.