【问题标题】:Dockerfile doesn't run the CMD if the ENTRYPOINT isn't finished如果 ENTRYPOINT 未完成,Dockerfile 不会运行 CMD
【发布时间】:2017-07-05 13:18:15
【问题描述】:

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

有可能吗?

【问题讨论】:

    标签: postgresql docker cmd dockerfile docker-entrypoint


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!!它非常适合我 :),我会读到 CMDENTRYPOINT 是如何一起工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2020-01-13
    • 1970-01-01
    • 2022-07-19
    • 2014-02-28
    相关资源
    最近更新 更多