为什么 pecl 在使用相同的 Dockerfile 时在另一台主机上为 xdebug 安装不同的版本?

Why does pecl install a different version for xdebug on another host when using same Dockerfile?

我有一个 php 项目。我已经使用 docker 和 docker-compose 设置了一个开发堆栈。 php 应用使用 php:7.1.2-apache 图像作为基础。

当运行:

pecl install xdebug

inside容器,我的容器安装:

PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303

然而现在,一位同事构建了该容器并执行了调用 pecl install xdebug 的脚本,但对他们来说,它安装了一个不同的版本:

PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012

为什么 pecl install 在相同的 docker 安装程序上安装不同的版本?

(主要区别在于主机,我的是 Ubuntu 16.04,我的同事使用的是 MacOS;但是 docker 应该抽象出差异。)

导致 php api 版本差异的原因是什么?

我想知道实际安装的是什么版本。因为这是相关的,因为对于开发设置,我手动安装了一个配置文件,我在其中精确指向该 xdebug 文件:

$ cat docker/php/apache2/20-xdebug.ini 
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
xdebug.remote_enable=1
xdebug.idekey=pstorm
xdebug.remote_autostart = 1

我没想到路径会改变。

myapp:
    build: .
    hostname: myapp
    ports:
        - "4430:443"
        - "8080:80"
    command: scripts/start.sh
    volumes:
        - ./docker/php/apache2/20-xdebug.ini:/usr/local/etc/php/conf.d/20-xdebug.ini
        - ./:/var/www/myapp
        - ./docker/bashrc:/root/.bashrc

我的目标是始终正确安装和加载相同的 xdebug 版本。

这是一个 docker-compose 用法错误。

我的同事做了:

$ git pull
$ docker-compose up -d

为了启动容器。由于他们过去已经构建了容器,因此没有重建容器,而是基于 php7.0 重新使用了一个过时的容器。

所以他们不得不 运行:

$ docker-compose up --build

强制重建它。然后设置脚本按预期工作。