提问者:小点点

是否存在在主机上执行参数的dockerfile RUN命令?


我们试图构建一个包含完整应用程序的Docker堆栈:一个Postgres数据库和至少一个web应用程序。

当堆栈启动时,我们预计应用程序会立即工作--不应该因为数据库设置或数据导入而有任何延迟。因此在创建映像时必须导入数据库模式(DDL)和初始数据。

这可以通过dockerfile中的run命令来实现,例如

RUN psql.exe -f initalize.sql -h myhost -d mydatabase -U myuser
RUN data-import.exe myhost mydatabase myuser

但是,AFAIU这将在Postgres容器内执行data-import.exe,这只有在Postgres容器是Windows容器时才能工作。我们的产品使用Linux Postgres发行版,所以这不是一个好主意。我们需要该映像是一个Linux Postgres容器。

因此自然的解决方案是在主机上执行data-import.exe,如下所示:

  • 当我们运行Docker Build时,将启动Linux Postgres容器。
  • 运行psql.exe...在Postgres容器中运行一些SQL命令。
  • 现在,我们的data-import.exe在主机上执行。它的Postgres客户端连接到容器中的数据库并导入数据。
  • 数据导入完成后,数据将提交到映像中,docker生成一个映像,其中包含Postgres数据库和导入的数据。

有这样的命令吗?如果没有,我们如何在Docker中实现这个场景呢?


共1个答案

匿名用户

使用正确的工具,dockerfile并不是万能的锤子。

显然,您来自一个州,在使用导入工具之前,您已经发布了postgres。现在您可以通过启动一个postgres容器来模拟该策略(没有dockerfile,只有Docker/Kubernetes)。然后运行import-tool,停止postgres-container,并使用“docker commit”生成结果的快照。提交的映像将用于部署的下一阶段。