当前位置: 首页 > 知识库问答 >
问题:

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

艾安和
2023-03-14

我们试图构建一个包含完整应用程序的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个答案

徐新荣
2023-03-14

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

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

 类似资料:
  • 问题内容: 创建映像时是否可以创建在主机上执行命令的命令? 现在我正在做: 使用Dockerfile: 我希望能够做到: 使用Dockerfile: 当然,此脚本与Dockerfile位于同一目录中。 问题答案: (只是一个建议) 通常,我们使用以下结构来构建docker映像: build.sh :这是您应该调用的。其他常见任务包括下载所需文件或从主机临时复制ssh密钥。最后,此脚本将调用 Doc

  • 问题内容: 我可以在主机上运行docker命令吗?我安装在Docker容器中,现在可以以某种方式在主机上使用命令(在后台使用Docker容器的aws)吗? 我的情况是这样的:我在生产主机上有数据库备份。现在我有Jenkins cron作业,它将从db容器中获取sql文件,并将其放入服务器文件夹中。现在我还希望jenkins将此备份文件上传到AWS存储上,但是在主机上我没有安装aws,也不想在主机上

  • 是否可以在 Ansible 主机上运行命令? 我的场景是,我想从内部托管的git服务器(并且不能在公司防火墙之外访问)进行结帐。然后我想将结账(tarbated)上传到正式服(托管在外部)。 目前,我正在考虑运行一个脚本,执行签出、tarballs,然后运行部署脚本-但如果我可以将其集成到Ansible中,那将是更好的选择。

  • 问题内容: 我正在Ubuntu上用python编写程序,以在RaspberryPi上执行命令,并与网络连接。 有人可以指导我该怎么做吗? 问题答案: 当然,有几种方法可以做到! 假设您在主机上安装了Raspberry Pi,并且用户名是。 这是运行命令的默认Python库。 您可以使其运行并在远程服务器上执行所需的任何操作。 scrat已在他的回答中提及。如果您不想使用任何第三方库,则绝对应该这样

  • 问题内容: 我有一个使用Python编写的守护程序。运行时,它的PID文件位于/tmp/filename.pid。如果守护程序未运行,则PID文件不存在。 在Linux上,如何检查以确保PID文件存在,如果不存在,请执行命令将其重新启动? 该命令将是 必须从特定目录执行。 问题答案: 检查给定路径是否存在并且是常规文件(仅检查路径是否存在) 在执行测试并返回成功,否则 的是C状,因此,如果左侧的命

  • 在具有管道和转发功能的MIPS体系结构上: add指令将在步骤3(执行操作)准备好结果,但我假设sw指令希望在步骤2(指令解码)得到结果 David A. Patterson的《计算机组织与设计》一书中有一个已解决的练习:在以下代码段中找到危险并重新排序指令以避免任何管道停滞: 解决方案: 在解决方案中,它正确识别加载使用危险并相应地重新排列代码,但是否也存在执行存储危险?