docker安装php GD库

news2024/11/16 21:47:31

故事是这样的:

公司采购了一套商城源码,使用的是 TP5,同事先行,用宝塔部署到生产环境,运行正常。后面我忙完手里的项目,也加入其中,我本地使用的是 docker

当我部署好开始运行时,发现 在登录界面时 图形验证码 报错 500

然后我绞尽脑汁的在想,会是什么问题呢?

终于,想到了,GD 库,我看了一下 php 模块,确实,没有 GD 库,所以,就有了如下的文章。

进入 docker 容器后,我们可以先查看一下 php 模块

发现,确实没有 gd 库。

那好吧,咱们开始安装 gd 库!

第一步:安装依赖

apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libfreetype6-dev
E: Unable to locate package libjpeg62-turbo-dev
E: Unable to locate package libpng-dev

运行时,出现了上面这些信息,意思就是说,无法定位到这些包

解决方案是:我们先进行更新下载安装软件包命令

第二步:更新下载安装软件包命令

apt-get update

因为环境的原因,所以如果 同学一次性成功那是最好,如果出现了我这样的问题,那就要再多出几个步骤了。。

W: Failed to fetch http://deb.debian.org/debian/dists/bullseye/InRelease  Temporary failure resolving 'deb.debian.org'
W: Some index files failed to download. They have been ignored, or old ones used instead.

当出现上面这些警告,那就是说,我们更新失败。。

是什么原因呢?镜像,我们要切换成我们国内的,这里我们示例 阿里云镜像。

cat /etc/resolv.conf

执行上面的命令,会输出:

nameserver 127.0.0.11
options ndots:0

我们就需要在这个文件中,加入 阿里云的镜像

vim /etc/resolv.conf

bash: vim: command not found

如果哈,如果出现上面这个 "找不到命令",那么恭喜,请去看我另外一篇文章吧:

docker 容器里bash: vim: command not found_龙枫995的博客-CSDN博客docker 容器里bash: vim: command not foundhttps://blog.csdn.net/longfeng995/article/details/130558108

偷偷的告诉你们一个秘密:因为我们 apt-get update 出现了异常,所以上面这篇文章,最后也是执行失败。。。。

那怎么办?无解啦!!!

这时候,我突然想到,咱们不是可以在 母机 中,直接复制文件到容器里的嘛,那么我们就:

在我们本地,先创建一个文件,内容写好,然后复制到容器里替换掉就可以啦。

首先,退出容器,在我们本地创建一个文件:resolv.conf

内容为:

nameserver 127.0.0.11
options ndots:0

nameserver 223.5.5.5  
nameserver 223.6.6.6

然后执行下面这段命令:

docker cp resolv.conf 容器名称:/tmp

注意事项:

  1. resolv.conf,文件的路径,我这里直接使用,是因为我命令行 是这个文件一样的路径,如果你的命令行和这个文件不在同一个目录下,你就得这样,参考:/d/docker/resolv.conf
  2. 容器名称,得改成你的"容器名称",或者"容器ID"

然后我们再进入容器,去到 /tmp 目录

cd /tmp/

ls

就能看到 resolv.conf 文件存在这里了,然后再看看内容:

cat resolv.conf

nameserver 127.0.0.11
options ndots:0

nameserver 223.5.5.5
nameserver 223.6.6.6

输出的内容,和我们本地是一样的,那么ok 继续!!

我们需要将这个文件替换原来的,执行下面这个命令:

cp resolv.conf /etc/resolv.conf

替换后,我们再查看一下试试:

cat /etc/resolv.conf

输出的内容,如果和上面是一样的,那么我们就可以回到最开始的命令

再执行试一下:(这次过程可能稍微较长了,也可能是因为网络原因,我这边更新蛮久的)

apt-get update

Reading package lists... Done

最后输出以上内容,那就成功了,太感动了。

这时候,我们就可以退回第一步,安装依赖!

apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev

最后,只要没输出 ERR 这类错误,或者 W 开头的警告,就代表成功!

第三步:安装 GD 库

然后我们再回到第一步中,执行安装 GD 库:

docker-php-ext-install gd

执行上面之后,无异常,也就代表成功!

然后我们再看一下 php 的模块:

太好了,这次有 GD库了

过程太繁琐了,不过结果是好的! 

退出容器,重启容器

我们输出一下 phpinfo() 查看 GD

nice,存在!

然后这时候又出现问题,人家这套商城代码,还是会 报错,然后我就找到异常,毕竟 前端控制台里,就只给了一个 500

我是完全不懂,为什么错误,然后我就找到了这个执行的地方

哼!没有这个方法 imagettftext()

阿巴阿巴....

说实话,到这一步 我有一点疲惫了。。。

最后还是想着,咬咬牙 来吧,都到这一步了,就差一步了,就修成正果了!

翻阅各类资料,最后找到了。

我们重新进入容器,安装一些扩展

apt install libjpeg62-turbo-dev libfreetype6-dev -y

su -c "docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg"

su -c "docker-php-ext-install gd"

依次执行上面的命令即可。

再退出容器,重启容器

输出 phpinfo() 看看

可以看到,和上一次相比,多了几个。

然后我们再尝试一下,这次是否还有问题

终于,终于,终于,我快哭了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学mybatis(三)ResultMap及分页

学习回顾:初学mybatis(二) 一、查询为null问题 要解决的问题:属性名和字段名不一致 环境:新建一个项目,将之前的项目拷贝过来 1、查看之前的数据库的字段名 2、Java中的实体类设计 public class User {pri…

Redis各数据类型操作命令

一、Redis数据类型及命令 (一)String 类别命令描述命令示例备注取/赋值操作赋值set key valueset lclkey lclvalue取值 get keyget lclkey取值并赋值getset key valuegetset lclkey1 lclvalue1获取原值,并设置新的值仅当不存在时赋值setnx k…

服务器解析漏洞与cms靶场搭建教程

文章目录 一、解析漏洞定义二、Kali安装docker并搭建DVWA靶场三、Win7 IIS7漏洞复现四、BEES靶场搭建五、CPMS靶场搭建六、SDCMS靶场搭建 一、解析漏洞定义 解析漏洞主要是一些特殊文件被Apache、IIS、Nginx等Web服务器在某种情况下解释成脚本文件格式并得以执行而产生的漏洞 …

The Company Requires Superficial StudyPHP 变量的使用 ③

作者 : SYFStrive 博客首页 : HomePage 📜: PHP MYSQL 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…

基于Java电动车租赁网站设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

信号链噪声分析20

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 所有模数转换器(ADC)都有一定量的“折合到输入端噪声”,可以将其模拟为与无噪声 ADC 输入串联的噪声源。折合到输入端噪声与量化噪声不同,后者仅在 ADC 处理交流 信号时出现。多数情况下&#x…

嵌入式中C++开发的基本操作方法

第一:面向对象 1、配置环境 虚拟机上网(ping www.baidu.com)sudo apt-get update //更新软件包sudo apt-get install -f //更新软件依赖sudo apt-get install g //安装c编译器 2、C发展 c98,第一版 c03,c11,c17 3、为什么学习C 4、面向对…

python包的研究

目录 json的方法timecollectionsdatetimetimestampsocket json的方法 json.load:表示读取文件,返回python对象 json.dump:表示写入文件,文件为json字符串格式,无返回 json.dumps:将python中的字典类型转换…

11-Vue常见优化手段

前言: 永远不要过早优化,见招拆招 使用key 对于通过循环生成的列表,应给每个列表项一个稳定且唯一的key,这有利于在列表变动时,尽量少的删除,新增,改动元素 index作为key值是唯一的,但不够稳…

STM32外设系列—sg90(舵机)

文章目录 一、sg90简介二、引脚连接三、控制方法四、程序设计4.1 配置定时器4.2 编写控制程序 五、360舵机 一、sg90简介 首先介绍说一下什么是舵机。舵机是一种位置(角度)伺服的驱动器。适用于一些需要角度不断变化的,可以保持的控制系统。…

threejs物理效果和声音

个人博客地址: https://cxx001.gitee.io 一、Threejs中如何创建物理场景 threejs中创建物理场景我们用它的扩展库:Physijs。它可以使场景中的对象有重力效果,可以相互碰撞,施加力之后可以移动,还可以通过合页和滑块在移动过程中…

LeetCode 打卡day44--完全背包问题及其应用

一个人的朝圣 — LeetCode打卡第44天 知识总结 Leetcode 518. 零钱兑换 II题目说明代码说明 Leetcode 377. 组合总和 Ⅳ题目说明代码说明 知识总结 今天结束了完全背包问题, 完全背包问题与01背包问题的区别在于可以无限次的使用物品的数量. 其和01背包的差别在于, 01背包先遍…

Leetcode-每日一题【707. 设计链表】

题目 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向链表,则还需要属性 prev 以指示链表中的上一…

Spring Boot 中的 @Id 注解是什么,原理,如何使用

Spring Boot 中的 Id 注解是什么,原理,如何使用 在 Spring Boot 中,Id 注解是一个非常重要的注解,它用于映射实体类中的主键字段。本文将介绍 Id 注解的作用、原理和使用方法。 1. Id 注解的作用 在 Spring Boot 中,…

shardingsphere-proxy 实现postgresql的分库分表

1、docker 安装zookeeper 1、拉取镜像 docker pull zookeeper2、运行容器 docker run -d -e TZ"Asia/Shanghai" -p 2181:2181 -v /home/sunyuhua/docker/zookeeper:/data --name zookeeper --restart always zookeeper3、查看容器是不是运行成功 docker exec -i…

threejs场景

个人博客地址: https://cxx001.gitee.io 前言 对象添加到场景里才能被渲染,场景是整个画面的容器。场景要显示任何东西,一般要有摄像机、光源、渲染对象。本章主要介绍场景类里常用的方法和属性,以及构建场景的基本组件。几何体和网格&…

从小白开始学习CAD(一)

什么是CAD ? CAD是计算机辅助设计(Computer-Aided Design)的缩写,它是一种利用计算机软件辅助进行设计和绘图的技术。 CAD是干什么的? CAD广泛应用于工程设计、建筑设计、产品设计等领域,可以提高设计效率、减少错误…

EthersV6之BigInt踩坑记录

起因:今天在调用合约的时候发现使用 BIgInt 丢了精度。看了下发现是自己的姿势不对,记录一下问题。 一、错误操作 const amountIn 2e24 const contract contract.function(BigInt(Number(2e24))为什么会这么写呢, 因为我们前端库升级到了 …

【C语言初阶(6)】猜数字游戏

文章目录 1. 游戏描述2. 代码结构2.1 菜单函数2.2 游戏函数2.3 主体函数 3. 代码实现 1. 游戏描述 电脑自动生成一个1-100以内的数字。我们输入一个我们猜的数字。如果我们猜的数字比电脑随机生成的数字大,那么输出(猜大了),反之…

【MinIO异常】Storage reached its minimum free drive threshold 的解决方案

Storage reached its minimum free drive threshold 的解决方案 一、背景描述二、原因分析三、问题解决 一、背景描述 部署在Linux服务器上的MinIO服务器昨天使用的还正常,包含上传文件,下载文件,登录MinIO浏览器端,然而今天登录…