Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

553
Views
Docker-compose up funciona perfectamente localmente, pero en gcp aparece un error que no pudo traducir el nombre de host db a la dirección: falla temporal en la resolución de nombres

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

En mi máquina local todo funciona perfectamente.

mi archivo docker

 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" ]

Aquí está mi 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 "Apply database migrations" python manage.py makemigrations python manage.py migrate echo "Starting server" python manage.py runserver 0.0.0.0:8000 exec "$@"

la configuración de mi base de datos

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

lo que he intentado

  1. empujando el contenedor db por separado pero no se inicia

Error de Cloud Run: el contenedor no pudo iniciarse. No se pudo iniciar y luego escuchar en el puerto definido por la variable de entorno PORT

Configuré el puerto en 5432, intenté ejecutarlo en el puerto 80 y aún no se conecta

Los contenedores de mi aplicación no se inician porque no se pueden conectar al contenedor db

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

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Sobre la base de las bases de datos de contenedores y comentarios de John Hanley, tampoco se recomienda alojar un servicio de base de datos (PostgreSQL, MySQL, etc.) en servicios como Cloud Run. Puede revisar hilos relacionados aquí y aquí . En resumen, los contenedores sin estado que pueden escalar hacia arriba y hacia abajo, además de no tener almacenamiento persistente , interferirían con el funcionamiento correcto de una base de datos. Como está utilizando GCP, puede optar por otros servicios que ya se ofrecen, como CloudSQL. Cloud SQL le permite crear instancias de PostgreSQL y puede integrarse con las aplicaciones alojadas de Cloud Run .

over 4 years ago · Santiago Trujillo Report

0

De los comentarios de John Hanley esto es lo que hice,

  1. creé una instancia postgresql de sql en la nube y configuré mi base de datos (ip interna)

  2. para conexiones de base de datos

 DATABASES = {'default': env.db()} # # If the flag as been set, configure to use proxy if os.getenv("USE_CLOUD_SQL_AUTH_PROXY", None): DATABASES["default"]["HOST"] = "cloudsql-proxy" DATABASES["default"]["PORT"] = 5432
  1. Ejecute gcloud run deploy --source . para implementar el proyecto actual (consulte a continuación el archivo docker)

  2. En la ejecución en la nube, edite e implemente una nueva versión en el contenedor, configure su puerto, por defecto es 8080, en variables y conexiones (si está usando env), configure sus variables env. por ejemplo, SECRET_KEY , DATABASE_URL , GOOGLE_CLOUD_PROJECT , GS_BUCKET_NAME , en conexiones,

por ejemplo, archivo .env

 SECRET_KEY=mysupersecretkey GS_BUCKET_NAME=mybucket GOOGLE_CLOUD_PROJECT=myprojid DATABASE_URL=postgres://dbuser:<db pass>@//cloudsql/projid:us-central1:instancename/dbname

conecte su instancia a la instancia de postgresql que creó anteriormente

bajo seguridad, es posible que desee cambiar la cuenta de servicio, no es necesario

  1. haga clic en implementar y su contenedor cobrará vida.

aquí está mi archivo docker de muestra

 FROM python:3.9 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 RUN adduser --disabled-password --no-create-home django-user # copy project COPY . /opt/app/ RUN chmod +x /opt/app/docker-entrypoint.sh EXPOSE 8000 ENTRYPOINT [ "/opt/app/docker-entrypoint.sh" ] CMD exec

Componer ventana acoplable

 version: '3.9' services: app: container_name: myname build: context: . ports: - "8000:8000" volumes: - ./src/:/usr/src/app/ - ./d_creds.json:/secrets/d_creds.json env_file: - ./.env restart: always # The proxy will help us connect to remote CloudSQL instance locally. # Make sure to turn off any VPNs for the proxy to work. cloudsqlproxy: container_name: cloudsql-proxy image: gcr.io/cloudsql-docker/gce-proxy:1.19.1 volumes: - ./d_creds.json:/secrets/cloudsql/d_creds.json ports: - "127.0.0.1:5432:5432" command: /cloud_sql_proxy -instances="projid:zone:instance-name"=tcp:0.0.0.0:5432 -credential_file=/secrets/cloudsql/d_creds.json restart: always

para el punto de entrada .sh

 #!/bin/bash python3 manage.py makemigrations python3 manage.py migrate exec "$@"
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!