我有以下配置行:
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运行?
答案 0 :(得分:1)
该行
RUN /etc/init.d/postgresql start
仅用于在构建图像时启动Postgres。
为了确保它在执行时运行,您需要创建一个脚本作为入口点(根据您的需要使用ENTRYPOINT
或CMD
,这将启动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这样更强大的东西。