如果入口点没有完成,Dockerfile不运行CMD

我正在尝试运行运行PostgreSQL的Dockerfile,然后向其中添加一些表。

这是我的Dockerfile:

FROM postgres:9.6 MAINTAINER agomez@ikerlan.es USER postgres ADD ./backup.sql /backup.sql ADD ./deploy/import_database.sh /import_database.sh USER root RUN chmod +x /import_database.sh USER postgres ENTRYPOINT ./docker-entrypoint.sh postgres CMD ./import_database.sh 

入口点没有完成,因为它运行postgres服务器。 如何在运行入口点20秒后运行CMD,但是没有完成入口点?

可能吗?

这不是CMDENTRYPOINT工作方式。 我build议阅读https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact并检查图表,以更好地了解ENTRYPOINTCMD如何与每个其他。

也就是说,如果你所要做的只是导入一个SQL文件或者在运行时运行一个脚本,官方的PostgreSQL映像已经包含了你。 有关如何执行此操作的信息,请参阅https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image

如果您的Dockerfile (如果您只是想导入SQL文件)的例子就是做一些事情:

 FROM postgres:9.6 ADD ./backup.sql /docker-entrypoint-initdb.d/backup.sql 

当从这个Dockerfile的图像构build容器时,默认的ENTRYPOINT脚本将启动一个临时的PostgreSQL实例,等待它准备好,导入你的数据,然后重新启动来提供连接。