Skip to content

Postgres Using Docker

To run PostgreSQL using Docker, follow these steps:

First, pull the official PostgreSQL Docker image from Docker Hub:

Terminal window
docker pull postgres

Now, you can run PostgreSQL in a container. This command will start a PostgreSQL instance in a Docker container and expose the PostgreSQL port (5432) on your local machine:

Terminal window
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -p 5432:5432 -d postgres
Here’s what each option does:
- `--name my-postgres`: Sets the name of the container to `my-postgres`.
- `-e POSTGRES_USER=myuser`: Sets the PostgreSQL user to `myuser`.
- `-e POSTGRES_PASSWORD=mypassword`: Sets the password for the `myuser`.
- `-e POSTGRES_DB=mydatabase`: Creates a new database named `mydatabase` during container initialization.
- `-p 5432:5432`: Maps the container's PostgreSQL port (5432) to your local machine's port (5432).
- `-d postgres`: Runs the container in the background using the `postgres` image.

Step 3: Verify the PostgreSQL Container is Running

Section titled “Step 3: Verify the PostgreSQL Container is Running”

Check if the container is running by using the following command:

Terminal window
docker ps
You should see the `my-postgres` container running with the PostgreSQL service.

You can now connect to the PostgreSQL instance inside the container using the following command:

Terminal window
docker exec -it my-postgres psql -U myuser -d mydatabase
This command opens an interactive session in the PostgreSQL database (`mydatabase`) using the user (`myuser`).

If you want to persist your data even after the container is stopped or removed, you should mount a volume. Here’s how to run the container with a volume:

Terminal window
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -v /my/local/path:/var/lib/postgresql/data -p 5432:5432 -d postgres
- Replace `/my/local/path` with the local directory where you want to store the PostgreSQL data.
With this setup, your PostgreSQL data will persist outside of the container.

To stop the container:

Terminal window
docker stop my-postgres
To remove the container:
```bash
docker rm my-postgres
This setup allows you to run PostgreSQL easily using Docker for development or testing purposes.
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -v /my/local/path:/var/lib/postgresql/data -p 5432:5432 -d postgres i'm in fedora. give a suitable directory
In Fedora, you can use a directory under `/var/lib` or any directory in your home folder to store PostgreSQL data. A suitable directory could be:
```bash
-v /home/your-username/postgres-data:/var/lib/postgresql/data
Replace `your-username` with your actual Fedora username. This will create a folder named `postgres-data` in your home directory to persist the PostgreSQL data.
Here’s the complete command:
```bash
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -v /home/your-username/postgres-data:/var/lib/postgresql/data -p 5432:5432 -d postgres
This way, your data will be saved in your home directory, and it will persist even if the container is stopped or removed.
docker run --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydatabase -v /home/your-username/postgres-data:/var/lib/postgresql/data -p 5432:5432 -d postgres give connecting string
To connect to your PostgreSQL instance running in Docker, you'll need the connection string in the following format:
```php
postgresql://<USER>:<PASSWORD>@<HOST>:<PORT>/<DATABASE>
For your specific setup, the connection string will be:
```bash
postgresql://myuser:mypassword@localhost:5432/mydatabase
Explanation:
- `myuser`: The PostgreSQL username.
- `mypassword`: The password for the PostgreSQL user.
- `localhost`: Since the PostgreSQL instance is running on Docker on your local machine.
- `5432`: The default PostgreSQL port exposed by Docker.
- `mydatabase`: The database you specified during setup.
You can use this connection string with any PostgreSQL client or application, such as Prisma, pgAdmin, or a direct `psql` command.