You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中PHP curl扩展启用失败求助:已尝试多种方法仍报错

问题:Docker环境下PHP curl_init() 未定义错误排查

已经尝试所有可行方法,仍在调用curl_init()时触发**Fatal error: Uncaught Error: Call to undefined function curl_init()**错误。已通过SSH进入容器确认curl系统命令可用,且本地php.ini已成功映射替换容器内的php.ini-development,但问题依旧。以下是我的配置文件:

Dockerfile

FROM wordpress:latest

RUN apt-get update
RUN apt-get install -y gcc
RUN apt-get install -y curl
RUN apt-get install -y libcurl4-openssl-dev
RUN docker-php-ext-install curl
RUN docker-php-ext-enable curl

compose.yml

services:
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    #image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
    volumes:
      - ./:/var/www/html
      - $PWD/php.ini:/usr/local/etc/php/php.ini-development
volumes:
  db_data:

php.ini 扩展配置片段

; Notes for Windows environments :
;
; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
;   extension folders as well as the separate PECL DLL download (PHP 5+).
;   Be sure to appropriately set the extension_dir directive.
;
;extension=bz2
extension=curl
;extension=ffi
;extension=ftp
;extension=fileinfo
;extension=gd
;extension=gettext
;extension=gmp
;extension=intl
;extension=imap
;extension=ldap
;extension=mbstring
;extension=exif      ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=oci8_12c  ; Use with Oracle Database 12c Instant Client
;extension=oci8_19  ; Use with Oracle Database 19 Instant Client
;extension=odbc
;extension=openssl
;extension=pdo_firebird
;extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop

排查思路

  • 确认PHP实际加载的配置文件:在容器内执行php --ini,检查输出中的Loaded Configuration File是否为你映射的文件,WordPress可能默认使用php.ini-production而非php.ini-development,导致扩展未生效。
  • 优化Dockerfile构建步骤:将多个RUN apt-get命令合并,避免缓存干扰,同时添加清理指令:
    RUN apt-get update && apt-get install -y gcc curl libcurl4-openssl-dev && rm -rf /var/lib/apt/lists/*
    
  • 验证curl模块是否真正安装:进入容器执行php -m,查看输出中是否包含curl;若没有,执行docker-compose build --no-cache重新构建镜像,避免复用旧缓存。
  • 调整php.ini映射路径:尝试将本地php.ini直接映射到容器内的/usr/local/etc/php/php.ini(即覆盖默认主配置文件),而非仅替换development版本。
  • 检查PHP-FPM配置一致性:Web服务使用的PHP-FPM可能加载了不同的配置文件,执行php-fpm -t验证配置,或查看容器内Web服务日志,确认FPM是否正确加载了curl扩展。

内容的提问来源于Stack Exchange,提问作者Carter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:53:11