I’ve got a 2GB Basic (22.04) Droplet running Docker for a my portfolio site (currently, will be hosting my other projects to display my previous projects). I’m new to Docker being ran for production, I’ve been using it mainly to run postgres, elasticsearch for development. Below is my docker-compose file for the current build I am having issues with.
version: "3.10"
services:
backend:
build:
context: .
dockerfile: Dockerfile
restart: always
volumes:
- static_volume:/backend/static
- media_volume:/backend/media
ports:
- "8000:8000"
command: >
sh -c "python manage.py collectstatic --noinput &&
python manage.py migrate &&
gunicorn project.wsgi:application --bind 0.0.0.0:8000"
depends_on:
- db
db:
image: postgres
volumes:
- postgresdata:/var/lib/postgresql/data:rw
env_file:
- ".env"
ports:
- "5432:5432"
container_name: xxxx_db
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
volumes:
- frontend_build:/frontend/build
nginx:
image: nginx:latest
restart: always
ports:
- "81:8080"
volumes:
- ./nginx/nginx-setup.conf:/etc/nginx/conf.d/default.conf:ro
- frontend_build:/var/www/frontend
- static_volume:/var/www/backend/static
- media_volume:/var/www/backend/media
depends_on:
- db
- backend
- frontend
volumes:
frontend_build:
static_volume:
media_volume:
postgresdata
It seems that every night the db is just being wiped, I’m able to re-run the migrations, docker compose down and up where the data will persist. But in the morning I get a bunch of errors from django implying that the database is no longer there.
I checked the xxxx_db logs and noticed this in the early hours of the morning:
2023-11-10 00:50:06.222 UTC [22891] FATAL: expected SASL response, got message type 0
2023-11-10 01:09:59.536 UTC [23012] FATAL: unsupported frontend protocol 0.0: server supports 3.0 to 3.0
2023-11-10 01:09:59.823 UTC [23013] FATAL: unsupported frontend protocol 255.255: server supports 3.0 to 3.0
2023-11-10 01:10:00.117 UTC [23014] FATAL: no PostgreSQL user name specified in startup packet
2023-11-10 01:35:07.437 UTC [23185] FATAL: database "template0" is not currently accepting connections
2023-11-10 01:37:09.770 UTC [23252] ERROR: cannot drop the currently open database
2023-11-10 01:37:09.770 UTC [23252] STATEMENT: DROP DATABASE postgres;
2023-11-10 01:37:10.886 UTC [23253] ERROR: cannot drop a template database
2023-11-10 01:37:10.886 UTC [23253] STATEMENT: DROP DATABASE template1;
2023-11-10 01:37:12.020 UTC [23254] ERROR: cannot drop a template database
2023-11-10 01:37:12.020 UTC [23254] STATEMENT: DROP DATABASE template0;
Any help would be greatly appreciated as it’s driving me insane!
Thanks! Matt
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Hi Matt! It looks like we’re facing an identical issue, with the same conf: 2GB Basic (22.04) + Django. On the postgress logs, we found: 023-12-10 14:32:19.693 UTC [8235] FATAL: database “template0” is not currently accepting connections 2023-12-10 14:32:20.982 UTC [8238] ERROR: cannot drop the currently open database 2023-12-10 14:32:20.982 UTC [8238] STATEMENT: DROP DATABASE postgres;
Have you found a fix for this?
thanks a lot! <3
Hi there,
Your Docker setup actually looks correct. It is indeed odd that your databases are getting dropped.
Can you share your Dockerfiles here too?
In the meantime, what you could try checking is that there are no cron jobs running that might be executing these commands both on the server itself and in the Docker containers.
Also, do you have any backup scripts or maintenance scripts that might be causing this behavior?
One more thing that you should check is that your database port is closed so it is not publicly accessible. Basically, check if your database ports are exposed to the internet and make sure that only your application can access them.
Best,
Bobby