docker 未解析生成参数

mmvthczy  于 2022-11-02  发布在  Docker
关注(0)|答案(1)|浏览(152)

我用以下代码编写了docker-compose

  1. version: "3.8"
  2. services:
  3. php:
  4. container_name: php
  5. build:
  6. context: ./php
  7. args:
  8. PHPVERSION: "7.4"
  9. XDEBUGVERSION: "2.9.1"

我有这样的Dockerfile

  1. ARG PHPVERSION
  2. ARG XDEBUGVERSION
  3. FROM php:${PHPVERSION}-fpm
  4. RUN apt-get update && apt-get install -y \
  5. && pecl install xdebug-${XDEBUGVERSION} \
  6. && docker-php-ext-enable xdebug

当我尝试编译php时,我发现我的参数没有解析。对于php,它没有给予我错误。看起来它只是下载了最新版本。但是对于xdebug,我得到了错误

  1. root@Server:# docker-compose up --build
  2. Building php
  3. Step 1/8 : ARG PHPVERSION
  4. Step 2/8 : ARG XDEBUGVERSION
  5. Step 3/8 : FROM php:${PHPVERSION}-fpm
  6. ---> 876051031ecc
  7. Step 4/8 : RUN apt-get update && apt-get install -y && pecl install xdebug-${XDEBUGVERSION}
  8. ....
  9. ....
  10. parsePackageName(): "" is neither a valid version nor a valid state in "xdebug-"
  11. invalid package name/package file "xdebug-"
  12. install failed
  13. ERROR: Service 'php' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y
  14. && pecl install xdebug-${XDEBUG_VERSION}
  15. && docker-php-ext-enable xdebug' returned a non-zero code: 1
u2nhd7ah

u2nhd7ah1#

您的问题在Docker-compose文档的此注解中进行了说明:
构建参数的作用域
在您的Dockerfile中,**如果您在FROM指令之前指定ARG,则ARGFROM**之下的建置指令中不可用。如果您需要在两个位置都可使用参数,也请在FROM指令之下指定该参数。如需使用方式的详细信息,请参阅文件中的了解ARGS和FROM如何互动一节。

  • 来源:https://docs.docker.com/compose/compose-file/#args,强调,我的 *

因此,修复就像将 DockerfileARG XDEBUGVERSION移到FROM下面一样简单。

  1. ARG PHPVERSION
  2. FROM php:${PHPVERSION}-fpm
  3. ARG XDEBUGVERSION
  4. RUN apt-get update && apt-get install -y \
  5. && pecl install xdebug-${XDEBUGVERSION} \
  6. && docker-php-ext-enable xdebug

与您的 docker-compose.yml 沿着,容器按预期启动。
然后,为了让您相信PHP映像是正确的映像,您应该查看执行步骤(这里是我的试用版):

  1. Step 2/4 : FROM php:${PHPVERSION}-fpm
  2. ---> 8407023453aa

然后运行命令:docker images

  1. REPOSITORY TAG IMAGE ID CREATED SIZE
  2. php 7.4-fpm 8407023453aa 6 days ago 405MB

如果那里的图像ID确实匹配,那么您可以确定您拥有正确的图像。

展开查看全部

相关问题