在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"
似乎没有任何工作。
你知道该怎么做吗?
RUN
和ENTRYPOINT
是执行脚本的两种不同方式。
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
,然后在启动容器时自动将其放入根目录中