docker - 构建参数未解决

标签 docker docker-compose dockerfile

我有带有以下代码的 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 the FROM instruction, ARG is not available in the build instructions under FROM. If you need an argument to be available in both places, also specify it under the FROM 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 ,强调,我的

因此修复方法非常简单,只需将 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 确实匹配,那么您就确定您拥有正确的图像。

关于docker - 构建参数未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65188587/

相关文章:

docker - 自动化Dockerfile生成器

node.js - 在一个 docker 镜像中运行两个 nodejs 应用程序

docker - 如何使docker为基础镜像中预先存在的文件更改仅生成差异层?

docker - 将 args 传递给容器时 Kubernetes pod/部署?

python - 在 Docker 容器中导入 python 文件

ruby-on-rails - 使用Docker-compose进行卷挂载的问题

node.js - MongoDB 与 Docker "failed to connect to server [localhost:27017] on first connect "

django - 权限被拒绝,无法打开静态文件,Docker,Django

maven - 使用 Google Cloud Build 时如何将私有(private)存储库凭据传递给 maven docker 镜像

php - 如何 “dynamize” Dockerfile/Docker Compose?