我用以下代码编写了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
1条答案
按热度按时间u2nhd7ah1#
您的问题在Docker-compose文档的此注解中进行了说明:
构建参数的作用域
在您的Dockerfile中,**如果您在
FROM
指令之前指定ARG
,则ARG
在FROM
**之下的建置指令中不可用。如果您需要在两个位置都可使用参数,也请在FROM
指令之下指定该参数。如需使用方式的详细信息,请参阅文件中的了解ARGS和FROM如何互动一节。因此,修复就像将 Dockerfile 的
ARG XDEBUGVERSION
移到FROM
下面一样简单。与您的 docker-compose.yml 沿着,容器按预期启动。
然后,为了让您相信PHP映像是正确的映像,您应该查看执行步骤(这里是我的试用版):
然后运行命令:
docker images
:如果那里的图像ID确实匹配,那么您可以确定您拥有正确的图像。