1

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?

1 Answer 1

2

The line

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 ENTRYPOINT or 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.

Sign up to request clarification or add additional context in comments.

1 Comment

Brilliant - I'll also have a look at the repo base image - I'm still new to all this *nix stuff :)