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

Dockerfile doesn't run the CMD if the ENTRYPOINT isn't finished

我正在尝试 运行 一个 运行 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?

可能吗?

这不是 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 实例,等待它准备就绪,导入您的数据,然后重新启动以提供连接。