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:

  • How to pull docker image with marathon which need to be authorized
  • How to deploy using capistrano without current release symlink?
  • How do I add a CA root certificate inside a docker image?
  • Disable Spark master's check for hostname equality
  • Node.js modules not building in Docker
  • Vagrant not able to connect with Docker
  • 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?

  • how to get the layers of a docker image on local host
  • Node-inspector in docker container using docker-compose
  • Docker in docker reach outer-layer registry by hostname
  • Piping stdout on windows to docker container running linux
  • How to access Docker containers from within a Vagrant VM
  • creating a default database in mysql using dockerfile
  • One Solution collect form web for “Running PostgreSql inside Docker”

    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.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.