当前位置: 首页 > 面试题库 >

在Dockerfile中运行脚本

蔺弘
2023-03-14
问题内容

我正在尝试在Dockerfile的构建过程中运行脚本。但这似乎不起作用。

我尝试过这种方式:

FROM php:7-fpm
ADD bootstrap.sh /
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"]

也这样:

FROM php:7-fpm    
ADD bootstrap.sh /
RUN bash -c "/bootstrap.sh"

并且也执行我正在运行的容器:

docker exec symfony /bin/bash -c "/bootstrap.sh"

似乎没有任何作用。

你知道怎么做吗?


问题答案:

RUNENTRYPOINT是执行脚本的两种不同方式。

RUN意味着它将创建一个中间容器,运行脚本并将该容器的新状态冻结在新的中间映像中。此后该脚本将不再运行:您的最终图像应该反映出该脚本的结果。

ENTRYPOINT 表示您的映像(尚未执行脚本)将创建一个容器并运行该脚本。

在这两种情况下,都需要添加脚本,并且a RUN chmod +x /bootstrap.sh是个好主意。

它也应该以shebang开头(如#!/bin/sh

考虑到您的脚本(KevinRaimbaud/docker- symfony/docker/php/bootstarp.sh:几个git config --global命令),最好在Dockerfile中运行一次该脚本,但请确保使用正确的用户(全局git
confightml" target="_blank">文件为%HOME%/。gitconfig,默认情况下为/ root一个)

添加到您的Dockerfile中:

RUN /bootstart.sh

然后,在运行容器时,检查的内容/root/.gitconfig以确认脚本已运行。



 类似资料:
  • 问题内容: 我正在尝试对laravel应用程序进行Docker化。该应用程序已经构建并且在git中,但是我.gitignore我的供应商文件夹。我添加了一个Dockerfile,如下所示: 当我构建时,这似乎很棒。我看到依赖项已下载,我看到输出中正在生成自动加载文件。但是,一旦构建完成,vendor文件夹实际上就不存在了。我猜这都是在中间容器中完成的,然后将其删除?所以当我运行docker- co

  • 问题内容: 我正在尝试抓取一个按如下方式工作的特定网页。 首先加载页面,然后运行某种javascript来获取填充页面所需的数据。我对这些数据感兴趣。 如果我使用HtmlAgilityPack获取页面-该脚本不会运行,那么我得到的基本上是空白页面。 有没有一种方法可以强制它运行脚本,以便我可以获取数据? 问题答案: 您将获得服务器返回的内容-与Web浏览器相同。然后,Web浏览器将运行脚本。HTM

  • 上述方法工作良好,但有一个警告 我想知道,有没有一种简单明了的方法可以直接调用bash函数,因为它是正常的二进制函数,而不需要包装?也许像是

  • 问题内容: 我有一个C ++程序,需要从PHP脚本中获取数据,对其进行处理,然后将数据返回给我的PHP脚本。 如何将值从PHP传递到C ++? 您如何运行C ++脚本?您必须先对其进行一些编译吗? 您如何从C ++脚本中获取值? 问题答案: 1。 如何将值从PHP传递到C ++? 回答: 在php文件中,您可以使用 exec 函数来执行C ++二进制文件。例: 2。 您如何运行C ++脚本?您必须

  • 问题内容: 我在代理后面,我需要通过安装一些东西。 我最好的是这个 问题是,我之后需要取消设置这些环境变量。 任何想法如何做到少于5层? 问题答案: 您需要使用构建时变量(–build-arg)。 该标志允许您传递在Dockerfile的RUN指令中像常规环境变量一样被访问的构建时变量。而且,这些值不会像ENV值那样保留在中间或最终图像中。 因此,您只有3行: 您只需要定义构建时变量和/或在图像构

  • 问题内容: 我想从下面的程序中运行一个shell脚本,但它似乎无能为力。我已经直接在linux终端中运行了相同的命令,它运行正常,所以我猜这是我的Java代码。如您所见,我首先使用PrintWriter将命令写入Shell脚本,但我希望这不会影响Shell脚本本身的运行。任何帮助,将不胜感激! 问题答案: 您应该使用返回的结果。 将命令作为单独的进程执行,并返回类型为的对象。您应该调用以便程序等待