在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一个脚本作为入口点(使用ENTRYPOINT
或CMD
取决于您想要的,启动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 。