所有tutorials都指出以
的格式运行postgresdocker run -d -p 5432 \
-t <your username>/postgresql \
/bin/su postgres -c '/usr/lib/postgresql/9.2/bin/postgres \
-D /var/lib/postgresql/9.2/main \
-c config_file=/etc/postgresql/9.2/main/postgresql.conf'
为什么我们的Docker文件中不能有:
ENTRYPOINT ["/etc/init.d/postgresql-9.2", "start"]
只需通过
启动容器docker run -d psql
这不是Entrypoint的目的还是我错过了什么?
答案 0 :(得分:2)
区别在于/etc/init.d
中提供的init脚本不是的入口点。它的目的是完全不同的;在后台启动入口点,然后向调用者报告成功或失败。该脚本导致postgres
进程(通常间接通过pg_ctl
)启动,与控制终端分离。
要使docker工作得最好,它需要直接运行应用程序,并附加到docker进程。这样,当用户请求它时,它可以有效地和一般地终止它,或者快速发现并响应流程崩溃。
答案 1 :(得分:1)
举例说明IfLoop说。
将CMD用于Dockerfiles:
USE postgres
CMD ["/usr/lib/postgresql/9.2/bin/postgres", "-D", "/var/lib/postgresql/9.2/main", "-c", "config_file=/etc/postgresql/9.2/main/postgresql.conf"]
运行:
$docker run -d -p 5432:5432 psql
观看PostgeSQL日志:
$docker logs -f POSTGRES_CONTAINER_ID