Understanding django.db.utils.OperationalError

  1. I was following along in Django For Professionals and I got the following error message. I checked the documentation and it lists the error as an exception but does not provide much detail. I checked stackoverflow but I have not been able to find answers. Has anyone run into this error before?

I was following along in Django For Professionals and I got the following error message. I checked the documentation and it lists the error as an exception but does not provide much detail. I checked stackoverflow but I have not been able to find answers. Has anyone run into this error before?

Docker.yml file (updated) : Hastebin

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
django.db.utils.OperationalError: could not translate host name “db” to address: nodename nor servname provided, or not known

Hastebin is sh*t because it rate limits me when I try to look at it a second time. Why not just post your config here, use 3 backticks in front and after.

And I doubt this has anything to do with the Docker Hub product, which hosts container images.

1 Like

@bluepuma77
TRACEBACK

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/manage.py", line 22, in <module>
    main()
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 414, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 98, in wrapped
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/commands/migrate.py", line 91, in handle
    self.check(databases=[database])
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/management/base.py", line 487, in check
    all_issues = checks.run_checks(
                 ^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/checks/registry.py", line 88, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/core/checks/model_checks.py", line 36, in check_all_models
    errors.extend(model.check(**kwargs))
                  ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/models/base.py", line 1461, in check
    *cls._check_indexes(databases),
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/models/base.py", line 1864, in _check_indexes
    connection.features.supports_covering_indexes
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/utils/functional.py", line 49, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/postgresql/features.py", line 84, in is_postgresql_11
    return self.connection.pg_version >= 110000
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/utils/functional.py", line 49, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/postgresql/base.py", line 354, in pg_version
    with self.temporary_connection():
  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 639, in temporary_connection
    with self.cursor() as cursor:
         ^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 284, in cursor
    return self._cursor()
           ^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 260, in _cursor
    self.ensure_connection()
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 243, in ensure_connection
    with self.wrap_database_errors:
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 244, in ensure_connection
    self.connect()
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/base/base.py", line 225, in connect
    self.connection = self.get_new_connection(conn_params)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/django/db/backends/postgresql/base.py", line 203, in get_new_connection
    connection = Database.connect(**conn_params)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/andrewstribling/Desktop/Programming/projects/django/code/django_for_beginners_books/django_for_professionals/code/ch3-postgresql/.venv/lib/python3.11/site-packages/psycopg2/__init__.py", line 122, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
django.db.utils.OperationalError: could not translate host name "db" to address: nodename nor servname provided, or not known

docker-compose.yml

version: "3.9"

services:
  web:
    build: .
    command: python /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:
      - db

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - "POSTGRES_HOST_AUTH_METHOD=trust"

volumes:
  postgres_data:

Dockerfile

# Pull base image
FROM python:3.10.4-slim-bullseye

# Set environment variables
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code

# Install dependencies
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# Copy project
COPY . .

After running docker build, somehow some way it started working. Its almost as if docker is utilizing psycopg instead of my enviornment.

I am not certain why it did not work correctly the first time but somehow some way it is has been resolved.

Only the libraries in the docker image will be used

Guess: if you change the Dockerfile after first running docker compose up, the image will not be rebuilt unless you add the --build flag or build the image manually.

Indeed. I moved the topic to general discussion

Correction:

I wrote “docker libraries”. That was a mistake. I wanted to write “libraries in the docker image” so I fixed my post above.

1 Like

It seems my error persists. I cannot seem to open my project with the run server command.

What happens when you try this example?

services:
  client:
    image: curlimages/curl:8.5.0
    entrypoint: "curl"
    command:
      - server
      - --retry
      - "3"
      - --retry-max-time
      - "3"
      - --retry-delay
      - "1"
      - --retry-connrefused
    depends_on:
      - server
  server:
    image: nginx:1.24.0

Run this command

docker compose run --rm client

You should get the nginx default page eventually. Probably immediately.