在Docker中运行PostgreSql

我有以下configuration行:

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"] 

但是,运行最后的命令来启动我的API产生这样的:

 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 

这看起来像PostgreSQl没有运行 – 我需要做什么来让postgresql运行?

该线

 RUN /etc/init.d/postgresql start 

只有在您的图像正在构build时才启动Postgres。

为了确保它在执行时运行,您将需要创build一个脚本作为入口点(使用ENTRYPOINTCMD取决于您想要的,启动Postgres并运行您的应用程序。

最简单的forms就是这样的

 #!/bin/sh /etc/init.d/postgresql start exec mono src/Rest.Api/bin/Debug/Rest.Api.exe 

您可以将其保存为entrypoint.sh并使用CMD ["entrypoint.sh"]作为Dockerfile的最后一行。

然而,在这一点上,可能需要研究像Phusion的基本图像这样更强大的function 。