es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Docker-compose up funciona perfectamente localmente, pero en GCP obtengo un error que dice “no se pudo traducir el nombre de host db a una dirección: fallo temporal en la resolución de nombres”.

Usted es un traductor del español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en formato markdown.

línea 187, en getnuevaconexión conexión = Database.connect(*params_conexión) Archivo “/usr/local/lib/python3.9/site-packages/psycopg2/init.py”, línea 122, en connect conn = _connect(dsn, connection_factory=factoría_conexión, *kwasync) django.db.utils.OperationalError: no se pudo traducir el nombre de host “db” a dirección: error temporal en la resolución del nombre

En mi máquina local todo funciona perfectamente.

Mi archivo docker

FROM python:3.9-slim-buster

<h1>RUN apt-get update && apt-get install -y libpq-dev \</h1>

<h1>gcc \</h1>

<h1>cliente-postgresql</h1>

<h1>establecer directorio de trabajo</h1>

WORKDIR /opt/app

<h1>establecer variables de entorno</h1>

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

<h1>instalar dependencias</h1>

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

<h1>copiar proyecto</h1>

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

Aquí está mi archivo 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

Mi punto de entrada

echo "Aplicar migraciones de base de datos"
python manage.py makemigrations
python manage.py migrate
echo "Iniciando servidor"
python manage.py runserver 0.0.0.0:8000

exec "$@"

mis ajustes de base de datos

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

Lo que he intentado

  1. Empujar el contenedor de la base de datos por separado, pero falla al iniciar.
    > Error de Cloud Run: el contenedor no se inició. No se pudo iniciar y escuchar en el puerto definido por la variable de entorno PORT

He configurado el puerto en 5432, intenté ejecutarlo en el puerto 80, aún no puede iniciarse

Mis contenedores de aplicaciones no pueden iniciarse ya que no pueden conectarse al contenedor de la base de datos

no se pudo traducir el nombre de host db a dirección: error temporal en la resolución del nombre

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “could not translate host name ‘db’ to address: Temporary failure in name resolution” sugiere que el contenedor de la aplicación está teniendo problemas para resolver el nombre de host del contenedor de la base de datos. Esto podría indicar un problema de DNS dentro de la red de Docker.

    Para depurar el problema, puede intentar los siguientes pasos:

    1. Verifique que el contenedor de la base de datos esté en ejecución y tenga una dirección IP válida ejecutando docker-compose ps.

    2. Verifique que el contenedor de la aplicación pueda alcanzar el contenedor de la base de datos ejecutando docker-compose exec app ping db. Si falla, esto indica un problema de red dentro de la red de Docker.

    3. Intente usar la dirección IP del contenedor de la base de datos en lugar del nombre de host. Actualice la configuración de la base de datos en Django para que use la dirección IP del contenedor de la base de datos en lugar de ‘db’.

    4. Verifique la configuración de DNS en su red de Docker. Si está utilizando una red personalizada con Docker, puede ser necesario configurar DNS manualmente.

    5. Intente reiniciar el daemon de Docker y/o reconstruir los contenedores para descartar cualquier problema temporal.

    6. Si el problema persiste, puede valer la pena buscar opciones de implementación alternativas, como implementar en un clúster de Kubernetes en lugar de Cloud Run, lo que podría ofrecer más flexibilidad con la configuración de redes y DNS.

Comments are closed.