为什么你不能使用“service postgres start”在docker中启动postgres?

时间:2014-02-20 04:30:08

标签: postgresql docker

所有tutorials都指出以

的格式运行postgres
docker 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的目的还是我错过了什么?

2 个答案:

答案 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