Reputation:
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?
Upvotes: 1
Views: 662
Reputation: 2666
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.
Upvotes: 2