在 Docker 容器中修改 php.ini,最標準且推薦的做法是**「在 Dockerfile 中將修改好的設定檔複製進去」,或者在開發階段使用「Volume 掛載」**。

不建議直接進入容器(docker exec)修改,因為容器一旦重啟,修改的內容就會全部消失。

以下為您提供最常用的三種修改方法:


方法一:透過 Dockerfile 修改(適合正式部署、永久生效)

這是最標準的作法。建立一個自訂的 php.ini,並在打包 Image 時複製進容器。

  1. 在你的專案目錄下,建立一個名為 my-php.ini 的檔案,寫入你要的設定:

    # my-php.ini
    open_basedir = "/var/www/html/:/tmp/"
    display_errors = Off
    
  2. 修改你的 Dockerfile,加入 COPY 指令(以官方 PHP 映像檔為例,其設定檔路徑通常為 /usr/local/etc/php/):

    FROM php:8.2-fpm# 或是你原本使用的 PHP 版本# 將官方提供的正式環境範本複製為 php.iniRUN cp"$PHP_INI_DIR/php-production""$PHP_INI_DIR/php.ini"# 將你寫好的設定檔覆蓋或放入 conf.d 目錄中(會自動被載入)COPY my-php.ini $PHP_INI_DIR/conf.d/
    
  3. 重新編譯與啟動容器:

    docker build -t my-custom-php .
    

方法二:使用 docker-compose 掛載(適合本地開發練習)

如果你使用 docker-compose.yml,可以直接用 volumes 將電腦上的 php.ini 對應到容器內,這樣只要在電腦上修改檔案,容器重啟就會立刻生效。

  1. 在電腦專案目錄下建立 php.ini 並寫入設定。

  2. 修改 docker-compose.yml:

    version:'3.8'services:php:image:php:8.2-fpmvolumes:
          - ./html:/var/www/html# 將本地的 php.ini 掛載到容器的設定檔路徑
          - ./php.ini:/usr/local/etc/php/php.iniports:
          -"8080:80"
    
  3. 重啟容器:docker-compose up -d


方法三:臨時進入容器修改(僅供測試,重啟會消失)

如果你只是想現在、立刻測試看看效果,不想重新打包或改設定:

  1. 進入容器的終端機:

    docker exec -it <容器名稱或ID> bash
    
  2. 確認 php.ini 的位置:

    php --ini # 會顯示 Configuration File (php.ini) Path,通常是 /usr/local/etc/php