我有带有以下代码的 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
最佳答案
您的问题在 docker-compose 文档的注释中进行了解释:
Scope of build-args
In your Dockerfile, if you specify
ARG
before theFROM
instruction,ARG
is not available in the build instructions underFROM
. If you need an argument to be available in both places, also specify it under theFROM
instruction. Refer to the understand how ARGS and FROM interact section in the documentation for usage details.
来源:https://docs.docker.com/compose/compose-file/#args ,强调,我的
因此修复方法非常简单,只需将 Dockerfile 的 ARG 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 确实匹配,那么您就确定您拥有正确的图像。
关于docker - 构建参数未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65188587/