php - 如何在我的 Dockerfile 中验证 PHP 是否包含我的镜像中所需的模块?

标签 php docker dockerfile

我正在将 Ubuntu 14.04 下在 Apache 中运行的旧版 PHP 应用程序迁移到 Docker 以进行进一步开发。

因此,我需要 PHP 引擎安装与 Ubuntu 安装相同的模块,并且我想在我的 Dockerfile 中自动验证 php -m 的输出包含与 Ubuntu 安装相同的模块。在 Ubuntu 计算机上缓存 php -m 的输出。

在 shell 脚本中,我希望使用退出代码和 set -e 可以做到这一点。 Dockerfile 文档没有提及任何有关 RUN 命令的退出代码的内容,因此它可能不可行。

因此,问题通常是“如何使代码中的 Dockerfile 构建失败”,但我专门针对我的用例询问了它,因为可能有更智能的方法来做到这一点。

建议?

最佳答案

虽然可能没有记录,但 RUN 命令很容易出错,因此脚本的退出代码将使构建失败。

解决您的用例的一个非常简单的方法是拥有两个文件并比较它们。

这是执行此操作的骨架:

FROM alpine

RUN echo 'a' > a; echo 'a' > b \
    && diff a b 
# all is right, this won't fail

RUN echo 'a' > a; echo 'b' > b \
    && diff a b
# woops?!

将构建:

$ docker build .
[+] Building 1.5s (6/6) FINISHED                                                                                     
 => [internal] load build definition from Dockerfile                                                            0.0s
 => => transferring dockerfile: 200B                                                                            0.0s
 => [internal] load .dockerignore                                                                               0.0s
 => => transferring context: 2B                                                                                 0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                0.6s
 => CACHED [1/3] FROM docker.io/library/alpine@sha256:a75afd8b57e7f34e4dad8d65e2c7ba2e1975c795ce1ee22fa34f8cf4  0.0s
 => [2/3] RUN echo 'a' > a; echo 'a' > b     && diff a b                                                        0.4s
 => ERROR [3/3] RUN echo 'a' > a; echo 'b' > b     && diff a b                                                  0.4s
------
 > [3/3] RUN echo 'a' > a; echo 'b' > b     && diff a b:
#6 0.352 --- a
#6 0.352 +++ b
#6 0.352 @@ -1 +1 @@
#6 0.352 -a
#6 0.352 +b
------
executor failed running [/bin/sh -c echo 'a' > a; echo 'b' > b     && diff a b]: exit code: 1

因此,在您的实际用例中,您可以做的是:

FROM alpine

COPY php-modules.txt .

RUN php -m | diff php-modules.txt -

这绝对是有目的的行为:

关于php - 如何在我的 Dockerfile 中验证 PHP 是否包含我的镜像中所需的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66304856/

相关文章:

php - 根据用户选择插入多个表? PHP

php - 在 php 中正确格式化数字

docker - 如何在 Docker 文件中配置 Databricks token

docker - INFO : I/O exception (java. io.IOException) 在处理对 {}->unix://localhost:80 的请求时捕获:权限被拒绝

php - Laravel 更新查询数组到字符串转换

php - 使用 Xdebug 共享相同代码库的两个应用程序中的断点

docker - 在 docker swarm 环境中部署 couchbase

docker - 将 ffmpeg 添加到 docker(Alpine 基础镜像)

docker - 使用 Jenkins 将 .net 核心添加到 docker 容器

python - 带有 ENV 变量和可选参数的 Docker ENTRYPOINT