在Dockerfile中运行一个脚本

我正在尝试在我的Dockerfile中构build过程中运行脚本。 但似乎并不奏效。

我试过这种方式:

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意味着它创build一个中间容器,运行脚本并冻结新容器的新状态到一个新的中间映像中。 之后脚本将不会运行:您的最终图像应该反映该脚本的结果。

ENTRYPOINT意味着你的图像( ENTRYPOINT没有执行脚本)将创build一个容器,并运行该脚本。

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

它也应该从一个shebang开始(像#!/bin/sh

考虑到你的脚本( KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh :几个git config --global命令),最好在Dockerfile中运行一次脚本,但要确保使用正确的用户(全局的gitconfiguration文件是%HOME%.gitconfig,默认是/ root)

添加到你的Dockerfile :

 RUN /bootstart.sh 

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

尝试使用ADD命令创build脚本并指定工作目录像这样(“script”是脚本的名称,而/root/script.sh是容器中需要的位置,它可以是不同的path:

 ADD script.sh /root/script.sh 

在这种情况下, ADD必须在CMD之前,如果你有一个顺便说一句,这是很酷的方式从主机导入脚本到容器中的任何位置

CMD地方[./script]

它应该自动执行你的脚本

您也可以将WORKDIR指定为/root ,然后在启动容器时自动将其放入根目录中