国内使用docker-php-extension-installer安装扩展经常网络超时,有什么可以替代的方案?

为了方便docker安装php扩展,在Dockerfile里使用docker-php-extension-installer安装扩展,但是国内经常网络超时,要科学上网才可以正常安装,服务器也不能一直处于代理状态,每次安装扩展都要在我本地打包好传到服务器重新安装,不知道有什么可以替代的方案

FROM php:8.2.12-fpm
ADD  https://hub.fgit.cf/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions  /usr/local/bin/

RUN chmod +x /usr/local/bin/install-php-extensions

RUN install-php-extensions bcmath
RUN install-php-extensions bz2
RUN install-php-extensions calendar
RUN install-php-extensions curl
RUN install-php-extensions exif
RUN install-php-extensions fileinfo
RUN install-php-extensions ftp
RUN install-php-extensions gd
RUN install-php-extensions gettext
RUN install-php-extensions imagick
RUN install-php-extensions imap
RUN install-php-extensions intl
RUN install-php-extensions ldap
RUN install-php-extensions mbstring
RUN install-php-extensions mcrypt
RUN install-php-extensions mongodb
RUN install-php-extensions mysqli
RUN install-php-extensions opcache
RUN install-php-extensions openssl
RUN install-php-extensions pdo
RUN install-php-extensions pdo_mysql

报错内容

24.72 ### INSTALLING BUNDLED MODULE gd ###
24.72 Installing libaom
156.3 curl: (28) Failed to connect to aomedia.googlesource.com port 443 after 131592 ms: Couldn't connect to server
------
Dockerfile:13
--------------------
  11 |     RUN install-php-extensions fileinfo
  12 |     RUN install-php-extensions ftp
  13 | >>> RUN install-php-extensions gd
  14 |     RUN install-php-extensions gettext
  15 |     RUN install-php-extensions imagick
--------------------
ERROR: failed to solve: process "/bin/sh -c install-php-extensions gd" did not complete successfully: exit code: 28
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

这个工具安装依赖的时候偏向使用国外的一些镜像或者源码包,像你贴出来的就用了 google,自然上不去。

可以去抄一下 dnmp、laradock 这些项目的里 Dockerfile 对应的部分替换掉。

3个月前 评论
讨论数量: 7

两个思路应该差不多
一、换个国内的镜像
二、本地环境中构建包含所有扩展的 Docker 镜像,然后将该镜像推送到 Docker 仓库(如 Docker Hub、阿里云容器镜像服务等),最后在服务器上从仓库中拉取镜像进行部署。

3个月前 评论

也可以在国外打包后推送到国内的平台。。比如打包可以用GitHub actions,阿里云的云效。

你的镜像应该是一个基础镜像,你的业务拷贝进来就可以直接用了,不应该是每次都全部重新编译。

3个月前 评论

这个工具安装依赖的时候偏向使用国外的一些镜像或者源码包,像你贴出来的就用了 google,自然上不去。

可以去抄一下 dnmp、laradock 这些项目的里 Dockerfile 对应的部分替换掉。

3个月前 评论
skarner

我建议楼主直接把 docker 的代理设置为电脑的代理

这样只要你的代理有效,就可以一劳永逸的解决所有因为墙不能正常访问的问题

否则你今天修改了这个项目的国内镜像,下个项目你还得再次修改镜像,反复折腾太累了

3个月前 评论
FROM php:7.0-fpm

ADD ./sources-stretch.list /etc/apt/sources.list

RUN apt-get update \
    && apt-get install -y curl libmcrypt-dev zip unzip zlib1g-dev libzip-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev libmemcached-dev \
    && docker-php-ext-install pdo pdo_mysql gd pcntl opcache bcmath zip \
    && pecl install redis-5.3.7 memcached \
    && docker-php-ext-enable redis memcached

我这样安装速度还可以

3个月前 评论
萧晔离
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
3个月前 评论

可以参考这位大佬的dnmp

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!