piątek, 30 września 2016

Run PostgreSQL using Docker with persistent data on Windows 10

Hello :-),

Recently I try too learn docker and how to use it, because I want to use it on my team.

For start I only need this as development environment on developers local machine. The task was simple, for now I just need start PostgreSQL and Redis, there are plenty information on the Internet how to start those containers and how to prepare docker-compose to start those two services, but there was ONE BIG PROBLEM I want my database data to be persistent so after we setup database and insert data and machine restarts or shutdown data will not be lost.

Well, the problem began..

I was not able to find one clear way of doing this on Windows.. I use docker version 1.12 for Windows.



 So I created this docker-compose.yml file after some articles. I try to persist data on the host machine...

So I start it with docker-compose up and both services: postgres and redis started and I was able to access it and create database with data, I was so happy when I run command docker-compose down and once again docker-compose up and saw that my database still exists without recreating!! Yes!!

I was little suprised that folder on my host C:\Users\Łukasz\dbdata which I put in docker-compose file was epty, I thougt that there should be some postgresql files in it...

But it works so propably my task was over..... not so fast, I need to restart my Windows, and after this I was suprised after launch docker-compose up.. my database with data was gone :-(.

Ok So I will try to read how to mount folder from host machine to docker containr in Windows. so I ended with this error data directory "/var/lib/postgresql/data" has wrong ownership and for now I gave up trying to mount volume on host machine.

So I go with this steps when I try to mount volume on host machine on Windows:

1. I share my C: and D: drive in docker settings


2. As a credential I put username with computer name RISCOLAP\Łukasz or using ip address like this: 10.0.75.1\Łukasz, when we put just username we are not enable to list shared folders.

3. Next I create folder data on my C: drive and put file on this
4. After this when I run command docker run --rm -v c:/Users:/data alpine ls /data I saw my file


5. I try to start postgres container with my host volume: At start everything was looking really good. Folder on my host was filled with postgresql files!!
And then I saw this error on console :-(, and my joy was over.

waiting for server to start....FATAL: data directory "/var/lib/postgresql/data" has wrong ownership HINT: The server must be started by the user that owns the data directory.

For now I do not find answer how to deal with this error. So for now I stop trying mount host folder as volume.

And I found working solution with docker volume without host volumes. So first we need to create volume with and then using this volume I create my docker-compose file like this:
And it works!! I can now restart my machine, shut down, and my data are safe!!! If you want more technical info I put some links I was reading during my searching of the solution: