Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Trying to install postgres within docker container and containerizing django project

I am new to docker and web-development generally. When trying to containerize my django-project I run into an error and can’t solve it for several days. The error might be silly, but I can’t find a solution. I’ll be very glad if someone helps me to solve me the problem. Thank you in advance.
As operational system I use Ubuntu 22.04

Here is the output after commands docker compose build and docker compose up:

[+] Running 2/0
 â ż Container test_task-db_task-1  Created                                                                                                               0.0s
 â ż Container test_task_container  Created                                                                                                               0.0s
Attaching to test_task-db_task-1, test_task_container
test_task-db_task-1  | 
test_task-db_task-1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
test_task-db_task-1  | 
test_task-db_task-1  | 2023-06-07 10:46:07.124 UTC [1] LOG:  starting PostgreSQL 14.1 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20211027) 10.3.1 20211027, 64-bit
test_task-db_task-1  | 2023-06-07 10:46:07.125 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
test_task-db_task-1  | 2023-06-07 10:46:07.125 UTC [1] LOG:  listening on IPv6 address "::", port 5432
test_task-db_task-1  | 2023-06-07 10:46:07.147 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
test_task-db_task-1  | 2023-06-07 10:46:07.163 UTC [21] LOG:  database system was shut down at 2023-06-07 10:45:29 UTC
test_task-db_task-1  | 2023-06-07 10:46:07.218 UTC [1] LOG:  database system is ready to accept connections
test_task_container  | Watching for file changes with StatReloader
test_task_container  | Exception in thread django-main-thread:
test_task_container  | Traceback (most recent call last):
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
test_task_container  |     self.connect()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 270, in connect
test_task_container  |     self.connection = self.get_new_connection(conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
test_task_container  |     connection = self.Database.connect(**conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
test_task_container  |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
test_task_container  | psycopg2.OperationalError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
test_task_container  |  Is the server running locally and accepting connections on that socket?
test_task_container  | 
test_task_container  | 
test_task_container  | The above exception was the direct cause of the following exception:
test_task_container  | 
test_task_container  | Traceback (most recent call last):
test_task_container  |   File "/usr/local/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
test_task_container  |     self.run()
test_task_container  |   File "/usr/local/lib/python3.10/threading.py", line 953, in run
test_task_container  |     self._target(*self._args, **self._kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
test_task_container  |     fn(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 136, in inner_run
test_task_container  |     self.check_migrations()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 574, in check_migrations
test_task_container  |     executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/executor.py", line 18, in __init__
test_task_container  |     self.loader = MigrationLoader(self.connection)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/loader.py", line 58, in __init__
test_task_container  |     self.build_graph()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/loader.py", line 235, in build_graph
test_task_container  |     self.applied_migrations = recorder.applied_migrations()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations
test_task_container  |     if self.has_table():
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 57, in has_table
test_task_container  |     with self.connection.cursor() as cursor:
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 330, in cursor
test_task_container  |     return self._cursor()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 306, in _cursor
test_task_container  |     self.ensure_connection()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 288, in ensure_connection
test_task_container  |     with self.wrap_database_errors:
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 91, in __exit__
test_task_container  |     raise dj_exc_value.with_traceback(traceback) from exc_value
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection
test_task_container  |     self.connect()
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 270, in connect
test_task_container  |     self.connection = self.get_new_connection(conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 26, in inner
test_task_container  |     return func(*args, **kwargs)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
test_task_container  |     connection = self.Database.connect(**conn_params)
test_task_container  |   File "/usr/local/lib/python3.10/site-packages/psycopg2/__init__.py", line 122, in connect
test_task_container  |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
test_task_container  | django.db.utils.OperationalError: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
test_task_container  |  Is the server running locally and accepting connections on that socket?
test_task_container  | 
                      

Here is my docker-compose file:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

services:
  task:
    build: .
    volumes:
      - .:/test_task
    ports:
      - 8000:8000
    image: app:django
    container_name: test_task_container
    command: python manage.py runserver 0.0.0.0:8000


  db_task:
    image: postgres:14.1-alpine
    restart: always
    env_file:
      - .env
    ports:
      - '5432:5432'
    volumes:
      - db:/var/lib/postgresql/data
volumes:
  db:
    driver: local

Here is dockerfile itself:

FROM python:3.10-slim-buster

ENV PYTHONBUFFERED=1

WORKDIR /test_task

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

.env file:

POSTGRES_HOST=db
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres
DJANGO_SETTINGS_MODULE=core.settings

And database settings in settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': os.getenv('POSTGRES_HOST'),
        'PORT': os.getenv('POSTGRES_PORT'),
        'USER': os.getenv('POSTGRES_USER'),
        'PASSWORD': os.getenv('POSTGRES_PASSWORD'),
        'NAME': os.getenv('POSTGRES_DB')
    }
}

I was trying to containerize my project and open it up on my local server

>Solution :

Several things to consider:

  • The services in your compose setup (within the created docker network) – by default – resolve to their name. Hence, POSTGRES_HOST should be "db_task"
  • the .env should be picked up automatically if located in the same location as your docker-compose.yaml. So for consistency, specify env_file for both or neither.
  • The django app depends on the db. If the db is not yet up and running, the django app can’t connect to it. Hence you should add a depends_on to the task service, so the app won’t be brought up before the db is ready:
  task:
    # ...
    depends_on:
      - db_task

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading