Running PostgreSQL in Docker Container on Windows 10
I was using Windows & Ubuntu, switching between them for some time. It was happening just because, I was working for different companies, with various cyber security policies. But some time ago, I have jumped from Ubuntu 20.04 to Windows 10, and used Ubuntu in WSL (Windows Subsystem for Linux). I have found problems to install docker on WSL and use it to run for example Postgres DB for my projects. So I was using Docker for Windows 10 for some time. But I really do not like it, and using docker on Ubuntu Bash is faster and easier for me. So I decided to find way to install and use it!
Motivation
- Install docker on WSL on Windows machine
- Make it possible to use Windows app, for example HeidiSQL (I am using it, right now) to connect to DB running in WSL docker container
Install WSL2 to run Docker
Please note: We should use PowerShell in Administrator mode on Windows machine. And let’s assume you have Ubuntu installed on you Windows machine in WSL.
- Open PowerShell in admin mode. Open Start menu, type PowerShell, click with right mouse button and select Run as Administrator
- Let’s enable virtualization, it is going to be used by WSL2:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
3. Ok. Let’s convert your current Linux Distribution to WSL version 2. Please be patient. It will take some time!
wsl --set-version Ubuntu 2
4. Optional, to make WSL2 default:
wsl --set-default-version 2
Install Docker to WSL2
- Open your Ubuntu WSL2 Bash
2. Update your Linux repository
sudo apt-get update
3. Download Docker dependencies
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
4. Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5. Install Docker repository
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
6. Update your Linux repository once again
sudo apt-get update
7. And install last Docker version
sudo apt-get install docker-ce
8. Let’s check Docker version, when it is installed on your WSL
docker --version
You should be able to see docker version:
Run Docker service and run PostgreSQL DB
- Let’s check Docker status
service docker status
or
sudo service docker status
You should see that docker service is not running:
2. Let’s run Docker service!
sudo service docker start
service docker status
You should see that it runs now
3. Let’s start new PostgreSQL database running in Docker container.
sudo docker run -d — name=NewContainerName -p 5432:5432 -e POSTGRES_PASSWORD=complicatedPassword postgres
Note: We should make some changes first
NewContainerName — any container name you like
complicatedPassword — any password to access your database
4. To check that everything works fine:
sudo docker ps
It should show you new container in a list.
Connect to this DB from your Windows machine
I am using HeidiSQL installed on my Windows 10 to access different databases. And I want to use same program to connect to this running PostgreSQL database running in Docker container in WSL2.
Note: Docker container is running, while your Ubuntu Bash window is opened. If you close Ubuntu, Docker service is going to be stopped.
- Open PowerShell
- Let’s get WSL2 IP address
wsl hostname -I
You should see 2 IP addresses
We are interested in IP address highlighted in green color. This IP address is our WSL2 address.
3. Let’s test if we can connect to port 5432 of WSL. This is default port used by PostgreSQL DB.
Test-NetConnection -ComputerName YourIpAdress -Port 5432
You should change YourIpAdress, to IP you just got in second point.
It will take some time, but you should be able to see:
If TcpTestSucceeded is True — everything works fine.
If it shows False, you should fix a connection.
4. Now we can open HeidiSQL and connect to DB:
Select TCP/IP, version of library for PostgreSQL.
Input IP received in second point (WSL2 IP address).
User and Database name: postgres
Password you have used to create a Docker container with Postgres DB.
Conclusion
Now you should have running Docker container with PostgreSQL DB in it. And you can easily connect to it, using HeidiSQL graphic interface and make all actions you need, to change your database.
Thanks for reading, and hope you like this manual.
MVP development — Minimum Viable Product development in just 6 weeks