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
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!!
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: