背景

公司新开了某个项目,我在新的服务器部署了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却构建失败的问题的更多相关文章

  1. 本地docker镜像上传Docker Hub,并且在腾讯云上pull该镜像,最后运行成功。

    1:在docker hub 上注册一个账号(本人直接能注册,有的说不能),然后创建自己的仓库. 2:登录docker hub ( longdbdocker --hub账号,longdb --仓库名称) ...

  2. 将本地镜像上传到Docker镜像仓库

    ⒈在Docker Hub(Docker官方镜像仓库)注册自己的用户名. ⒉在Docker中使用docker login命令登录自己的用户名密码. ⒊使用docker push 镜像名称 上传本地镜像到 ...

  3. 本地docker镜像上传到腾讯云镜像仓库。

    和上篇上传到Docker Hub类似,只是登录时切换成腾讯云镜像仓库地址(ccr.ccs.tencentyun.com/longdbtencentdocker/publongdb)即可. docker ...

  4. vue 线上,本地,不同变量配置

    线上的接口和本地的接口不一样,每次打包的时候要手动更改很麻烦.自动让他配置 1.修改package.json  --mode line 传参数line给配置项,编译buildline的时候,就能把li ...

  5. 记录线上APP一个排序比较引发的崩溃 Comparison method violates its general contract!

    最近在做产品需求的时候上线了一个新的产品需求,给用户多了一种新的排序排序规则,更加方便用户找到自己想要的东西.新版本发布后,QA 给我发了一个 线上崩溃 bug 链接,具体内容如下: 看到上面的链接, ...

  6. 记录线上一次线程hang住问题

    线上发现执行某特定任务在某个特定时间点后不再work.该任务由线程池中线程执行定时周期性调度,根据日志查看无任何异常.从代码研判应该无关定时任务框架,因为对提交的定时任务做了wrap,会将异常都cat ...

  7. 【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 ...

  8. docker镜像管理和dockerfile详解(8)

    docker镜像加速 docker-io先到 https://cr.console.aliyun.com/ 注册一下,登录成功后,在控制台,看左侧,有一个加速器按钮,点开找到自己的专属加速链接,我的是 ...

  9. Linux线上与本地的httpd搭建【制作本地yum源】

    当前时间 2019-10-24-10:53:12 制作本地yum源 我用的VMware Workstation 系统环境: CentOS 7.5 首先我们先要挂载系统镜像 [root@laopa ~] ...

随机推荐

  1. 关于session共享

    最近在银行部署项目,一台Nginx做负载均衡,两台Tomcat,两台Oracle互备,一台ftp文件服务器.Tomcat涉及到session共享问题,所以就在这里做一下总结. 首先关于session ...

  2. MySQL—查询某时间范围的数据

    -- 查询今天的数据 select * from `user` where to_days(birthday) = to_days(CURDATE()); -- 查询昨天的数据 select * fr ...

  3. AX_InventDim

    static void Job1(Args _args) { ; info(InventDim::find("D00000001").preFix()); } public voi ...

  4. 学习Tensorflow的LSTM的RNN例子

    学习Tensorflow的LSTM的RNN例子 基于TensorFlow一次简单的RNN实现 极客学院-递归神经网络 如何使用TensorFlow构建.训练和改进循环神经网络

  5. [uboot] (第五章)uboot流程——uboot启动流程

    http://blog.csdn.net/ooonebook/article/details/53070065 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  6. [uboot] (第三章)uboot流程——uboot-spl代码流程

    http://blog.csdn.net/ooonebook/article/details/52957395 以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为 ...

  7. 走进JDK(九)------AbstractMap

    map其实就是键值对,要想学习好map,得先从AbstractMap开始. 一.类定义.构造函数.成员变量 public abstract class AbstractMap<K,V> i ...

  8. linux mysql 5.7.25 安裝

    1.下载 https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 2.解压 tar ...

  9. Centos yum 修改为阿里源以及常用的命令

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  10. Apache Phoenix Flume集成 -- JsonEventSerializer改进

    背景 数据从kafka ingest到Phoenix.数据格式采取Json.数据链路: api -> kafka -> Flume -> Phoenix 官方JsonEventSer ...