0

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

是否可以?

4

1 回答 1

5

这不是CMDand的ENTRYPOINT工作方式。我建议阅读https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact并检查图表,以便更好地了解它们之间的ENTRYPOINT交互CMD方式。

也就是说,如果您只想导入一个 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 实例,等待它准备好,导入您的数据,然后重新启动以提供连接。

于 2017-07-05T17:00:22.717 回答