记录线上与本地docker镜像一致,但Dockerfile却构建失败的问题
背景
公司新开了某个项目,我在新的服务器部署了docker环境,本着ctrl+c 和ctrl+v的惯例,直接把以前的php环境的Dockerfile文件直接复制到新项目服务器那里,结果构建失败,失败的原因是某个软件包(如libpng12-dev)不存在,其中一个报错如下:
E: Package 'libpng12-dev' has no installation candidate
这时候我心里响起无数个草泥马,为什么以前的环境就没问题(同样都是php:7.1-fpm),网上查了一下资料,说这个包在ubuntu16已经不存在了,用libpng-dev。

这时候我还没有醒悟过来什么回事,直接把原来安装的包替换成新版本的包,但是之后会出现安装到某些本该有的包的时候还是找不到的情况。
解决
怀疑镜像源的问题
试着在自己的vpn(ubuntu16环境)上面试了一下apt-cache search同样的包,是可以找到,于是怀疑是不是国内的镜像源的问题,是不是清华的软件源抽风了,把Dockerfile里的替换国内的镜像的命令去掉。
#COPY sources.list /etc/apt/sources.list
结果世界一下子清静了,docker构建成功,然后我又情不自禁感叹国内的开发环境真一般的时候,殊不知这其实是自己的无知引起的。
再次解决问题
由于本地的网速实在一般,连接外国的软件源下载得贼慢,构建一个环境几乎需要2个小时,实在受不了,打算换一个镜像源,但是该换debian的哪一版本镜像源呢?这时候需要用lsb_release -a 查看一下就好了,在docker环境下查到是debian9,然后换上163的软件源,一切又正常了,对比原来的软件源链接,这时候我才意识到应该是应该是php镜像的内核升级了,从debian8换成了debian9....而不同版本的镜像源是不一样的,所以才会出现某些包不存在的情况
下面附上debian9的163源:
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
结论
docker的基础软件镜像很有可能会升级内核环境,其实学习过linux的人都知道对软件的升级不一定是好事,可能新版本的软件稳定性还没有旧的好,因此如果线上的环境没有什么特殊需求,应当尽可能地避免升级,docker也是同理,但是由于本人是直接从公共源拉下来的镜像,这期间和你上次开发的环境相比,内核的改变也是不可预料的,这其中也会引起和你的Dockerfile不兼容的问题,因此如果是有条件的话,尽可能自己购买docker镜像存储的服务,或者自己搭建服务器,自己的软件源自己用的省心...
记录线上与本地docker镜像一致,但Dockerfile却构建失败的问题的更多相关文章
- 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。
1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...
- 将本地镜像上传到Docker镜像仓库
⒈在Docker Hub(Docker官方镜像仓库)注册自己的用户名. ⒉在Docker中使用docker login命令登录自己的用户名密码. ⒊使用docker push 镜像名称 上传本地镜像到 ...
- 本地docker镜像上传到腾讯云镜像仓库。
和上篇上传到Docker Hub类似,只是登录时切换成腾讯云镜像仓库地址(ccr.ccs.tencentyun.com/longdbtencentdocker/publongdb)即可. docker ...
- vue 线上,本地,不同变量配置
线上的接口和本地的接口不一样,每次打包的时候要手动更改很麻烦.自动让他配置 1.修改package.json --mode line 传参数line给配置项,编译buildline的时候,就能把li ...
- 记录线上APP一个排序比较引发的崩溃 Comparison method violates its general contract!
最近在做产品需求的时候上线了一个新的产品需求,给用户多了一种新的排序排序规则,更加方便用户找到自己想要的东西.新版本发布后,QA 给我发了一个 线上崩溃 bug 链接,具体内容如下: 看到上面的链接, ...
- 记录线上一次线程hang住问题
线上发现执行某特定任务在某个特定时间点后不再work.该任务由线程池中线程执行定时周期性调度,根据日志查看无任何异常.从代码研判应该无关定时任务框架,因为对提交的定时任务做了wrap,会将异常都cat ...
- 【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w
镜像拉取一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cancel ...
- docker镜像管理和dockerfile详解(8)
docker镜像加速 docker-io先到 https://cr.console.aliyun.com/ 注册一下,登录成功后,在控制台,看左侧,有一个加速器按钮,点开找到自己的专属加速链接,我的是 ...
- Linux线上与本地的httpd搭建【制作本地yum源】
当前时间 2019-10-24-10:53:12 制作本地yum源 我用的VMware Workstation 系统环境: CentOS 7.5 首先我们先要挂载系统镜像 [root@laopa ~] ...
随机推荐
- SQL中GROUP BY语句与HAVING语句的使用
GROUP BY语句,经过研究和练习,终于明白如何使用了,在此记录一下同时添加了一个自己举的小例子,通过写这篇文章来加深下自己学习的效果,还能和大家分享下,同时也方便以后查阅,一举多得 一.GROUP ...
- centos7.2 下 nginx 开机启动
1.在系统服务目录里创建nginx.service文件 1 vi /lib/systemd/system/nginx.service 内容如下 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- 源码管理工具Git-windows平台使用Gitblit搭建Git服务器
原文地址:https://blog.csdn.net/smellmine/article/details/52139299 搭建Git服务器,请参照上面链接. 注意: 第十二步:以Windows Se ...
- 6.8 lambda方法 6.9 枚举类
6.9枚举 对于对象个数有限的类可以用枚举类来避免创建对象的随意性. 枚举类关键字enum,是一种特殊的类:构造器只能用private修饰,枚举类的所有实例在第一行举出(系统默认用public sta ...
- 桌面应用开发之WPF动态背景
因为项目需要,在WPF开发的桌面应用中,登陆页面需使用动态背景.由于没有前端开发人员,所以由半吊子的后端开发人员根据效果图写前端xaml.去掉页面上边框,抽离动态背景设置代码: <Windo ...
- 【python-HTMLTestRunner】HTMLTestRunner测试报告中文乱码问题解决
打开HTMLTestRunner.改动如图所示行 改成‘utf-8’
- Unity3d让某个物体一直正对着相机
//将以下代码绑定到相机上 using UnityEngine; using System.Collections; public class LookatScipt : MonoBehaviou ...
- 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件
[源码下载] 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebVi ...
- Android一些日常的错误
一.加载.so出现的一些问题 1. so文件 放进了优先级低的ABI目录 问题:如果你的项目中,有其他优先级更好的ABI目录,但是你把ABI文件方法放到了优先级低的目录,最后导致你的ABI文件无法被加 ...
- maya2013卸载/安装失败/如何彻底卸载清除干净maya2013注册表和文件的方法
maya2013提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2013失败提示maya2013安装未完成,某些产品无法安装,也有时候想重新安装maya ...