我正在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启动并且一切都在运行,当然最好是在分离模式下?
答案 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保持活动状态。通过以分离模式启动容器,它现在完全符合我们的需要。