当前位置:  开发笔记 > 编程语言 > 正文

在Dockerfile中运行脚本

如何解决《在Dockerfile中运行脚本》经验,为你挑选了3个好方法。

我正在尝试在我的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"

似乎没什么用.

你知道怎么做吗?



1> VonC..:

RUN并且ENTRYPOINT是执行脚本的两种不同方式.

RUN表示它创建一个中间容器,运行脚本并在新的中间图像中冻结该容器的新状态.之后不会运行脚本:您的最终图像应该反映该脚本的结果.

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

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

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

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

添加到您的Dockerfile:

RUN /bootstart.sh

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


此外,您可能需要`bootstrap.sh`而不是`bootstarp.sh`:请参阅http://stackoverflow.com/a/1254561/6309

2> Michael..:

尝试使用ADD命令和工作目录规范创建脚本像这样("脚本"是脚本的名称,并且/root/script.sh是容器中的所需位置,它可以是不同的路径:

ADD script.sh /root/script.sh

在这种情况下ADD必须要来CMD,如果你有一个BTW,那么很酷的方式将脚本从主机导入到容器中的任何位置

CMD地方[./script]

它应该自动执行您的脚本

您也可以指定WORKDIRas /root,然后在启动容器时自动放置在root中



3> VeganHunter..:

除了上面的答案:

如果您在Windows中创建/编辑了.sh脚本文件,请确保使用以Unix格式结尾的行保存它.默认情况下,Windows中的许多编辑器会将Unix行结尾转换为Windows格式,而Linux将无法识别文件开头的shebang(#!/ bin/sh).所以Linux会产生错误消息,就像没有shebang一样.

提示:

如果使用Notepad ++,则需要单击"编辑/ EOL转换/ UNIX(LF)"

如果您使用Visual Studio,我建议安装" End Of Line "插件.然后按Ctrl-R,Ctrl-W可以看到行结尾.要设置Linux样式结尾,可以按Ctrl-R,Ctrl-L.对于Windows样式,请按Ctrl-R,Ctrl-C.


哇,你救了我的日子。这次真是万分感谢。
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有