如果ENTRYPOINT尚未完成,Dockerfile不会运行CMD

时间:2017-07-05 13:18:15

标签: postgresql docker cmd dockerfile docker-entrypoint

我正在尝试运行一个运行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服务器,入口点无法完成。 如何在运行ENTRYPOINT 20秒后运行CMD,但是没有完成ENTRYPOINT?

有可能吗?

1 个答案:

答案 0 :(得分:4)

这不是CMDENTRYPOINT的工作方式。我建议您阅读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上的映像构建启动容器时,默认的ENTRYPOINT脚本将启动临时PostgreSQL实例,等待它准备就绪,导入数据,然后重新启动以进行服务连接。