Docker容器在启动Postgres DB

时间:2018-05-01 15:35:20

标签: postgresql docker

我正在Docker中设置Postgres 9.5 AS,并安装了所有内容。然而问题是,当我启动Docker Container时,似乎Postgres首先启动,但随后Container立即停止。 (它不会显示docker container ls。)。当我用--entrypoint sh覆盖Container启动时,并手动启动Postgres,一切正常。

我还检查了docker logs <container-id>,但这根本没有给我任何信息。

设置如下:

Dockerfile:

ENTRYPOINT ["/opt/edb/9.5AS/bin/init.sh"]

init.sh:

su enterprisedb -c '/opt/edb/9.5AS/bin/pg_ctl start -D /opt/edb/9.5AS/data'

从命令提示符我运行:

docker run -it -v pgdata:/opt/edb/9.5AS/data <image_name>

它几乎看起来确实启动了,但是一旦启动过程完成,shell就会停止,因此Container也会停止。

那么如何获得它以便容器启动,Postgres启动并且一切都在运行,当然最好是在分离模式下?

1 个答案:

答案 0 :(得分:0)

在研究了一些之后,我发现答案部分也是通过在Stackoverflow上找到线索。

无论如何,我修改了我的init.sh脚本,如下所示:

/opt/edb/9.5AS/bin/pg_ctl start -D /opt/edb/9.5AS/data exec
"$@"

Dockerfile现在结束如下:

USER enterprisedb
ENTRYPOINT ["/opt/edb/9.5AS/bin/init.sh"]
CMD ["/bin/bash"]

解决方案的核心是init.sh脚本中的最后一行以及Dockerfile中的最后一行。两者结合使得一旦数据库启动,就会启动一个新的shell(/ bin / bash)。这将在前台运行,从而使Container保持活动状态。通过以分离模式启动容器,它现在完全符合我们的需要。