我正在尝试运行一个运行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?
有可能吗?
答案 0 :(得分:4)
这不是CMD
和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实例,等待它准备就绪,导入数据,然后重新启动以进行服务连接。