Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何";“动态化”;Dockerfile/Docker编写?_Php_Docker_Docker Compose_Xdebug - Fatal编程技术网

Php 如何";“动态化”;Dockerfile/Docker编写?

Php 如何";“动态化”;Dockerfile/Docker编写?,php,docker,docker-compose,xdebug,Php,Docker,Docker Compose,Xdebug,我正在对遗留PHP项目进行归档。我希望在开发环境中启用Xdebug,我的Dockerfile将预构建的php.ini复制到容器中 由于某些网络问题,我们必须在Mac OS X上安装xdebug.remote\u connect\u back=0(以及相应的xdebug.remote\u host=docker.for.Mac.localhost)和Linux上的xdebug.remote\u connect\u back=1 是否可以在Dockerfile/Docker Compose中获取当前

我正在对遗留PHP项目进行归档。我希望在开发环境中启用Xdebug,我的Dockerfile将预构建的php.ini复制到容器中

由于某些网络问题,我们必须在Mac OS X上安装
xdebug.remote\u connect\u back=0
(以及相应的
xdebug.remote\u host=docker.for.Mac.localhost
)和Linux上的
xdebug.remote\u connect\u back=1

是否可以在Dockerfile/Docker Compose中获取当前操作系统类型,以复制与主机操作系统对应的php.ini

这些信息在映像构建时不可用(也不应该)。相同的基于Linux的映像可以运行在本机Linux、Mac上的Linux VM(然后是Docker机器VM或Docker for Mac提供的隐藏VM)、Windows上的Linux VM,甚至Linux上的Linux VM,而不管它最初构建在何处

应在容器运行时提供主机名等配置。环境变量是执行此操作的典型方式,或者您可以使用Docker卷机制从主机推入配置文件

如果您的问题纯粹是调试应用程序,那么您还可以在主机上设置完整的开发环境,并且只在映像中内置在更像生产环境中运行它所需的内容。

使用
docker compose.yml中的
。在
config
文件夹(或任何位置)中创建
php.linux.ini
php.mac.ini
,并将其中一个映射到容器:

services:
  php:
    image: php
    volumes:
      - ./config/php.linux.ini:/etc/php.ini #or wherever the config is

当然,您的用户将不得不手动更改
php.linux.ini
php.mac.ini
,但这是一次手动更改。

我决定使用Docker Compose读取
.env
文件的能力。整个工作流程如下:

  • 创建带有所有注释行的
    .env.sample
    文件(抱歉,无法正确显示注释行):
    
    OS=windows
    OS=linux
    OS=mac
    
  • 通过在
    .gitignore
    文件中添加
    /.env
    行来忽略
    .env
    文件

  • 使用
    $cp.env.sample.env
    复制示例文件,只保留与操作系统对应的一行未注释

  • 将php.ini中特定于操作系统的Xdebug相关部分移动到单独的文件中,文件名为
    Xdebug mac.ini
    Xdebug windows.ini
    Xdebug linux.ini
    ,等等

  • 将docker compose.yml添加到所选服务的
    args
    部分,其值类似于
    -OS=${OS}

  • 在相应的
    Dockerfile
    中添加行:
    
    ARG OS=${OS}
    复制./xdebug-${OS}.ini/usr/local/etc/php/conf.g/
    

.env
中提到的OS值将在构建映像时展开

  • 执行
    $docker compose up-d--build
    构建映像并启动容器

  • 在success上提交所有更改,让您的同事在任何平台上正确设置Xdebug;别忘了告诉他们从模板中创建自己的
    .env
    文件实例