Docker部署CodeIgniter4遇Composer未找到及SSL证书问题求助
Docker部署CodeIgniter4:composer找不到与SSL证书错误解决
问题背景
Windows下用Docker Desktop部署CodeIgniter4,编写Dockerfile后执行docker-compose up -d,先后遇到两个问题:
- 首次执行到第5步报错
composer: not found - 添加COPY composer镜像的步骤后,出现curl SSL证书错误:无法获取本地颁发证书
原Dockerfile代码
FROM php:8.1.0-apache RUN apt-get update \ && apt-get install -y nano zip unzip git libicu-dev \ && docker-php-ext-configure intl \ && docker-php-ext-install intl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer WORKDIR /var/www/html RUN composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no-progress --no-interaction RUN chown -R www-data:www-data /var/www/html \ && composer self-update COPY codeigniter.conf /etc/apache2/sites-available/ RUN a2ensite codeigniter.conf \ && service apache2 reload || true RUN cd /etc/apache2/sites-available \ && a2dissite 000-default.conf \ && service apache2 reload || true EXPOSE 80
首次报错日志
=> => sha256:4b3248f455fea3a6577a6aadd5530530b0972512e5a13f7bbe455c5f3320c8da 245B / 245B 49.5s => => sha256:3e27fc6740deae2a2a872cfc43f56e9742d1b9c190ad7edae55cea58a58877fa 895B / 895B 50.1s => => extracting sha256:2c23b6beb07ab1b78af3929ff31a2ec34ece94ac611be50a32d54406e925b64f 7.1s => => extracting sha256:9874148cff9ac18f61ee23d041488694c002bf082e32d004232055b99e2f705f 0.0s => => extracting sha256:52defac986292394d78237bb5d79c9b45c18bcd31ba38ccf9a1c9fab6ee955b7 1.1s => => extracting sha256:585eed6f53992820a6d18df110b45f7a75a2d8b94fc827978b09e444ee3985dd 0.0s => => extracting sha256:aa83ee0498fff0d0660501ab49e185d11ce4952ccd2f64a982e2909f21163bcd 0.0s => => extracting sha256:ca8554b7b29aca11f30babbc12ca6b112261341f031b57b119c78e2137cd1d9b 0.2s => => extracting sha256:e2ce73d77ea79e033f9232d301bb900d4dc675733da9f16917eedd1d9466df20 0.0s => => extracting sha256:bbe0962a8cbafcf37eab4d505d3d1dc8b9f4c390df93f7841bfbe66c3d395f1c 1.0s => => extracting sha256:acfda1f63e3484bd437cf3611e53cae2b5ae5e72a3b417f886eb768f0ca09663 0.0s => => extracting sha256:4b3248f455fea3a6577a6aadd5530530b0972512e5a13f7bbe455c5f3320c8da 0.0s => => extracting sha256:3e27fc6740deae2a2a872cfc43f56e9742d1b9c190ad7edae55cea58a58877fa 0.0s => [db] exporting to image 0.1s => => exporting layers 0.0s => => writing image sha256:6eff5dd669da5c4558cf63f3ee935ed0b215245a24fdce3fc133c4c3e84b3665 0.0s => => naming to docker.io/library/codeigniter-project-db 0.0s => [web 2/9] RUN apt-get update && apt-get install -y nano zip unzip git libicu-dev && docker-php-ext-c 72.2s => [web 3/9] RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer 0.7s => [web 4/9] WORKDIR /var/www/html 0.1s => ERROR [web 5/9] RUN composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no 0.4s ------ > [web 5/9] RUN composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no-progress --no-interaction: 0.368 /bin/sh: 1: composer: not found ------ failed to solve: process "/bin/sh -c composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no-progress --no-interaction" did not complete successfully: exit code: 127
二次报错日志
... => CACHED [web stage-0 2/10] RUN apt-get update && apt-get install -y nano zip unzip git libicu-dev && 0.0s => CACHED [web stage-0 3/10] RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --f 0.0s => CACHED [web stage-0 4/10] WORKDIR /var/www/html 0.0s => [web stage-0 5/10] COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer 0.1s => ERROR [web stage-0 6/10] RUN composer create-project codeigniter4/appstarter app --prefer-dist --stability=s 1.9s ------ > [web stage-0 6/10] RUN composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no-progress --no-interaction: 1.091 Composer plugins have been disabled for safety in this non-interactive session. 1.091 Set COMPOSER_ALLOW_SUPERUSER=1 if you want to allow plugins to run as root/super user. 1.091 Do not run Composer as root/super user! See https://getcomposer.org/root for details 1.105 Creating a "codeigniter4/appstarter" project at "./app" 1.842 Plugins have been disabled automatically as you are running as root, this may be the cause of the following exception. See also https://getcomposer.org/root 1.853 1.868 In CurlDownloader.php line 371: 1.868 1.868 curl error 60 while downloading https://repo.packagist.org/packages.json: S 1.868 SL certificate problem: unable to get local issuer certificate 1.869 1.869 1.869 create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [<package> [<directory> [<version>]]] 1.869 ------ failed to solve: process "/bin/sh -c composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no-progress --no-interaction" did not complete successfully: exit code: 100
问题解决与修正后的Dockerfile
问题1:composer找不到的原因与解决
通过curl安装composer到/usr/bin可能存在路径不生效或安装失败的情况,直接从官方composer镜像复制二进制文件更可靠,同时确保路径在$PATH中。
问题2:SSL证书错误的原因与解决
容器基础镜像缺少根CA证书,导致无法验证HTTPS站点,需要安装ca-certificates包补充证书链。
修正后的完整Dockerfile
# 使用指定版本的PHP-Apache镜像 FROM php:8.1.0-apache # 安装依赖:添加ca-certificates解决SSL证书问题,保留原有工具 RUN apt-get update \ && apt-get install -y nano zip unzip git libicu-dev ca-certificates \ && docker-php-ext-configure intl \ && docker-php-ext-install intl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 从官方composer镜像复制已编译的composer,避免curl安装的问题 COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer # 设置工作目录 WORKDIR /var/www/html # 创建CodeIgniter4项目,添加COMPOSER_ALLOW_SUPERUSER避免root警告 RUN COMPOSER_ALLOW_SUPERUSER=1 composer create-project codeigniter4/appstarter app --prefer-dist --stability=stable --no-progress --no-interaction # 设置目录权限 RUN chown -R www-data:www-data /var/www/html # 复制并启用站点配置,禁用默认站点 COPY codeigniter.conf /etc/apache2/sites-available/ RUN a2ensite codeigniter.conf \ && a2dissite 000-default.conf \ && service apache2 reload || true # 暴露80端口 EXPOSE 80
关键修改点说明
- 安装
ca-certificates包,解决SSL证书验证问题 - 替换curl安装composer的方式,改用
COPY --from=composer:latest直接复制官方二进制文件 - 执行
composer create-project时添加COMPOSER_ALLOW_SUPERUSER=1,避免root用户的警告和插件禁用问题 - 合并站点配置的RUN命令,减少镜像层数量
内容的提问来源于stack exchange,提问作者aye decoder
相关产品推荐
相关产品推荐

