Running PostgreSql inside Docker
I have the following config lines:
RUN sudo apt-get -y install postgresql USER postgres RUN /etc/init.d/postgresql start &&\ psql --command "CREATE USER test WITH SUPERUSER PASSWORD 'test';" &&\ createdb -O test test EXPOSE 5432 CMD ["mono", "src/Rest.Api/bin/Debug/Rest.Api.exe"]
However, running the final command to spin up my API yields this:
setting listen on Failed to establish a connection to 'localhost'. at Npgsql.NpgsqlClosedState.Open (Npgsql.NpgsqlConnector context, Int32 timeout) [0x00000] in <filename unknown>:0 at Npgsql.NpgsqlConnector.Open () [0x00000] in <filename unknown>:0 at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) [0x00000] in <filename unknown>:0 exit
Which looks like PostgreSQl isn’t running – what do I need to do to get postgresql running?
One Solution collect form web for “Running PostgreSql inside Docker”
RUN /etc/init.d/postgresql start
only serves to start Postgres while your image is being built.
To ensure it is running at execution, you will want to create a script as entrypoint (using either
CMD depending on what you want, which starts Postgres and runs your application.
The simplest form of this would be something like
#!/bin/sh /etc/init.d/postgresql start exec mono src/Rest.Api/bin/Debug/Rest.Api.exe
You could save this as
entrypoint.sh and use
CMD ["entrypoint.sh"] as the last line in your Dockerfile.
However, at this point it might be worth looking into something more robust like Phusion’s baseimage.