在 Dockerfile 中运行脚本

新手上路,请多包涵

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

似乎没有任何效果。

你知道怎么做吗?

原文由 Kevin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

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

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

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

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

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

Considering your script ( bootstrap.sh : a couple of git config --global commands), it would be best to RUN that script once in your Dockerfile ,但请确保使用正确的用户(全局 git config 文件是 %HOME%/.gitconfig ,默认情况下是 /root 一个)

添加到您的 Dockerfile:

 RUN /bootstrap.sh

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

原文由 VonC 发布,翻译遵循 CC BY-SA 4.0 许可协议

除了上面的答案:

如果您在 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。

原文由 VeganHunter 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题