Laravel 7构建Docker容器时docker-php-ext-install返回exit code:1如何解决
问题原因
- 缺少PHP扩展编译依赖:
docker-php-ext-install安装pdo_mysql、mbstring扩展时,需要依赖libonig-dev、default-mysql-client等系统库,你原Dockerfile的apt安装列表未包含这些依赖,导致扩展安装失败返回错误码1。 - 错误使用sudo命令:官方
php:7.4镜像默认没有预装sudo工具,且构建过程默认以root用户执行,不需要加sudo执行composer命令,会直接触发命令不存在的错误。 - MySQL初始化配置冲突:docker-compose中db服务的环境变量配置了
MYSQL_USER=root,而MySQL镜像默认已存在root用户,重复创建会导致数据库初始化失败,后续服务启动也会受影响。
修复后的配置
Dockerfile
FROM php:7.4 RUN apt-get update -y && apt-get install -y \ openssl \ zip \ unzip \ git \ libonig-dev \ libpng-dev \ libzip-dev \ default-mysql-client RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN docker-php-ext-install pdo_mysql mbstring zip WORKDIR /app COPY . . RUN composer install CMD php artisan serve --host=0.0.0.0 EXPOSE 8000
docker-compose.yml(仅修改db服务的environment段)
db: container_name: admin_db image: mysql:5.7.22 restart: always environment: MYSQL_DATABASE: admin MYSQL_ROOT_PASSWORD: root volumes: - .dbdata:/var/lib/mysql ports: - 33066:3306 networks: - app
操作步骤
- 替换本地的Dockerfile和docker-compose.yml对应内容
- 执行
docker-compose build --no-cache backend清除旧构建缓存,重新构建后端镜像 - 构建完成后执行
docker-compose up -d即可启动所有服务
内容的提问来源于stack exchange,提问作者PinPiguin
相关产品推荐
相关产品推荐

