I spent the whole day on this and said that I was not impressed by the unnecessary complexity of what should be a simple task - it would be a gross understatement.
Well, getting this from my chest, I am creating a django application using the docker machine, docker-compose, postgresql and redis, following this tutorial .
I managed to get a basic tutorial to work with, but it is not suitable for my needs, since I need to create a user and a database for my application - as opposed to using postgres for both.
I used the answer from @dnephin on a similar question and changed my code as follows:
I created a new Docker file in a new directory ./database/:
FROM postgres:9.6
COPY . /fixtures
WORKDIR /fixtures
RUN /fixtures/setup.sh
./database/setup.sh Content:
#!/bin/bash
set -e
pg_createcluster 9.6 main --start
/etc/init.d/postgresql start
su - postgres
psql -f create_fixtures.sql
/etc/init.d/postgresql stop
./database/create_fixtures.sql Content:
CREATE DATABASE mydatabase WITH ENCODING 'UTF8';
CREATE USER webuser ENCRYPTED PASSWORD 'deadbeefsnaf0' NOSUPERUSER NOCREATEDB NOCREATEROLE;
GRANT ALL PRIVILEGES ON mydatabase TO webuser;
and finally, my postgres service in the docker_compose.yml file is modified to use the assembly:
postgres:
build: ./database/
...
When I run docker-compose build, the assembly goes through the movement, and then barfs, where I import the SQL file file using psql :
frothing@themouth:~/path/to/directory$ docker-compose build
redis uses an image, skipping
Building postgres
Step 1/4 : FROM postgres:9.6
---> ff0943ecbb3c
Step 2/4 : COPY . /fixtures
---> fae19dc88da8
Removing intermediate container 84b860aee55c
Step 3/4 : WORKDIR /fixtures
---> aa88438dc69f
Removing intermediate container b801ddc3b374
Step 4/4 : RUN /fixtures/setup.sh
---> Running in ca3e89ec2460
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.utf8
socket /var/run/postgresql
port 5432
Starting PostgreSQL 9.6 database server: main.
psql: FATAL: role "root" does not exist
ERROR: Service 'postgres' failed to build: The command '/bin/sh -c /fixtures/setup.sh' returned a non-zero code: 2
I tried to solve this problem using useless docker documentation for the postgresql service - but didn't get it.
How can i solve this?