docker 未解析生成参数

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

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

version: "3.8"
services:
  php:
    container_name: php
    build:
      context: ./php
      args:
        PHPVERSION: "7.4"
        XDEBUGVERSION: "2.9.1"

我有这样的Dockerfile

ARG PHPVERSION
ARG XDEBUGVERSION

FROM php:${PHPVERSION}-fpm

RUN apt-get update && apt-get install -y \
    && pecl install xdebug-${XDEBUGVERSION} \
    && docker-php-ext-enable xdebug

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

root@Server:# docker-compose up --build
Building php
Step 1/8 : ARG PHPVERSION
Step 2/8 : ARG XDEBUGVERSION
Step 3/8 : FROM php:${PHPVERSION}-fpm
 ---> 876051031ecc
Step 4/8 : RUN apt-get update && apt-get install -y  && pecl install xdebug-${XDEBUGVERSION}     
....
....
parsePackageName(): "" is neither a valid version nor a valid state in "xdebug-"
invalid package name/package file "xdebug-"
install failed
ERROR: Service 'php' failed to build: The command '/bin/sh -c apt-get update && apt-get install -y
&& pecl install xdebug-${XDEBUG_VERSION}     
&& 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下面一样简单。

ARG PHPVERSION

FROM php:${PHPVERSION}-fpm

ARG XDEBUGVERSION

RUN apt-get update && apt-get install -y \
    && pecl install xdebug-${XDEBUGVERSION} \
    && docker-php-ext-enable xdebug

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

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

然后运行命令:docker images

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

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

相关问题