Docker-compose up работает отлично локально, но при использовании gcp я получаю ошибку could not translate host name db to address: Временный сбой в разрешении имен

line 187, in get_new_connection connection = Database.connect(**conn_params) File "/usr/local/lib/python3.9/site-packages/psycopg2/init. py", строка 122, in connect conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: could not translate host name "db" to address: Временный сбой в разрешении имен

.

На моей локальной машине все работает отлично.

мой файл докера

FROM python:3.9-slim-buster

# RUN apt-get update && apt-get install -y libpq-dev \
#      gcc \
#      postgresql-client


# set work directory
WORKDIR /opt/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /opt/app/requirements.txt
RUN chmod +x /opt/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /opt/app/
RUN chmod +x /opt/app/docker-entrypoint.sh
EXPOSE 8000
ENTRYPOINT [ "/opt/app/docker-entrypoint.sh" ]

Вот мой docker-compose.yml

version: '3.9'
services:
  db:
    image: postgres
    restart: always
    
    environment:
    - POSTGRES_NAME=postgres
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=postgres
    
    - POSTGRES_PASS=postgres
    
    volumes:
      - postgres_data:/var/postgres/data/
   
      
  
 

  app:
    restart: always
    build: 
      context: .
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    container_name: myproj
    volumes:
      - ./app/:/usr/src/app/
    ports:
      - "8000:8000"
    


    depends_on:
      - db
      
   
     
  
volumes:
  postgres_data:
     driver: local

моя точка входа

echo "Apply database migrations"
python manage.py makemigrations
python manage.py migrate
echo "Starting server"
python manage.py runserver 0.0.0.0:8000

exec "$@"

настройки моей базы данных

'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': "5432"
    }

Что я пробовал

  1. pushing the db container separately but it fails to start

Ошибка запуска облака: Container failed to start. Не удалось запустить, а затем прослушать порт, определенный переменной окружения PORT

.

Я установил порт 5432, попробовал запустить его на порту 80, все равно не выходит в сеть

Мои контейнеры приложений не запускаются, поскольку не могут подключиться к контейнеру db

не удалось перевести имя хоста db в адрес: Временный сбой в разрешении имен

В развитие комментария Джона Хэнли и контейнерных баз данных, также не рекомендуется размещать службы баз данных (PostgreSQL, MySQL и т.д.) на сервисах типа Cloud Run. Вы можете просмотреть соответствующие темы здесь и здесь. В целом, контейнеры без статических данных, которые могут масштабироваться вверх и вниз, в дополнение к отсутствию постоянного хранилища , будут мешать правильному функционированию базы данных. Поскольку вы используете GCP, вы можете выбрать другие услуги, которые уже предлагаются, например, CloudSQL. Cloud SQL позволяет создавать экземпляры PostgreSQL и может быть интегрирован с приложениями, размещенными в Cloud Run.

Вернуться на верх