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"
}
Что я пробовал
- 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.