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 add user with dockerfile?
  • Issues with Running Flask and SQLAlchemy app through Docker
  • not able to run docker container as it exits right after it start
  • Redirect users to different domains of the same web application according to their ip address location
  • Development environment and local sites URLs best practices
  • Could i run docker in a docker Container Ubuntu 14.04
  • 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?

  • Deploying scala app as a docker container
  • How to deploy an IPv6 container with Docker Swarm Mode or Docker Compose
  • docker nginx:latest image - content on docker host not changing
  • nginx setting up variable upstream per virtual host
  • Docker run, no space left on device
  • Is the latest version of docker from Amazon on ec2 broken?
  • 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.