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

所有的教程都指出以格式运行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的目的,还是我错过了什么?

区别在于/etc/init.d提供的初始化脚本不是入口点。 它的目的是完全不同的; 在后台获取入口点,然后向调用者报告成功或失败。 该脚本通常间接地通过pg_ctl启动postgres进程,从控制terminal分离。

为了使docker工作得最好,它需要直接运行应用程序,连接到docker进程。 这样当用户请求时可以有用并且一般地终止它,或者快速发现并响应进程崩溃。

举例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