在Docker中运行PostgreSql

时间:2014-11-16 13:23:56

标签: postgresql docker

我有以下配置行:

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运行?

1 个答案:

答案 0 :(得分:1)

该行

RUN    /etc/init.d/postgresql start

仅用于在构建图像时启动Postgres。

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

最简单的形式就像

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

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

然而,在这一点上,可能值得研究像Phusion&#39; baseimage这样更强大的东西。