简体   繁体   中英

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?

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 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM