在学习 dockerfile 的时候,发现编写的 Dockerfile 中的 apt-get install 命令无法找到要安装的包,所以记录一下这次发生的错误。

环境:宿主机:windows 10 上安装 VMware 虚拟化软件

     VMware workstation 15 pro

客户机:Ubuntu 18.04 STL

     Dockerfile 内容:

FROM ubuntu:18.04  # 从 dockerhub 直接拉下来的官方镜像
MAINTAINER zhangpeng<ssezhangpeng@gmail> ENV MYPATH /usr/local
WORKDIR $MYPATH RUN apt-get -y install vim
RUN apt-get -y install net-tools EXPOSE CMD echo $MYPATH
CMD echo "success---------------ok"
CMD /bin/bash

Dockerfile

出错情景:

出错原因:

  在 Ubuntu 中,刚下载下来的 ubuntu 是没有任何包索引的,所以由于该镜像中的仓库没有添加任何包索引,导致找不到要安装的包,在正常情况下,刚安装完成 Ubuntu 后,都需要执行一下:apt-get update 命令来更新一下包索引,而其它系统则不需要,比如 centos 好像就不需要,会事先自动给你添加包索引。

解决办法:

  在 Dockerfile 中添加更新包索引的命令,重新构建镜像即可。

更新后的 Dockerfile 文件:

FROM ubuntu:18.04
MAINTAINER zhangpeng<ssezhangpeng@gmail> ENV MYPATH /usr/local
WORKDIR $MYPATH RUN apt-get update
RUN apt-get -y install vim
RUN apt-get -y install net-tools EXPOSE CMD echo $MYPATH
CMD echo "success---------------ok"
CMD /bin/bash

Dockerfile

注:如果出现下述的情况:

出错情景:

出错原因:

  这种错误是因为无法解决 ‘archive.ubuntu.com’ 网址,及无法解析上述网址,所以我们可以想到是 DNS 的问题,如果你的宿主机的网络设置是自己手工配置的,可能你的 DNS 服务器被手工设置为了:8.8.8.8 和 8.8.4.4 ,如下图所示。但是在某些情况下,比如某些学校、企业内部封锁了当前网络对 8.8.8.8 DNS 服务器的访问,这时,我们就不能正确解析上述出现错误的网址了。

注:下图为 window 下的 ipv4 的属性配置,如果你的宿主机是 Linux 系列,则可自行搜索找到自己的 DNS 配置

解决方法:

  我们可以设置成别的可以访问的 DNS 服务器地址,比如百度的 DNS 服务器(180.76.76.76);或者设置成上图中的自动获取 DNS 服务器地址即可。所以如果出现了下述情况,我们可以在自己的宿主机上 ping 8.8.8.8 ,看是否能访问该 DNS服务器。

注:公共的 DNS 服务器地址列表可通过附录链接进行查看

附录链接:

https://dns.supfree.net/

https://blog.csdn.net/lennSUIkA/article/details/80157427

dockerfile---apt-get install vim 时 Unable to locate package vim的更多相关文章

  1. Ubuntu install 错误 E:Unable to locate package

    今天在 Ubuntu 上执行 sudo apt install sl 命令,结果报错:E:Unable to locate package sl 上网查询了一下,先更新一下 apt-get,执行:su ...

  2. Ubuntu Server安装telnet服务时"Unable to locate package telnetd"解决方法

    装好Ubuntu Server 12.04后,用apt-get安装telnetd报"E: Unable to locate package telnetd",解决方法如下: 虚拟机 ...

  3. sudo apt-get install ubuntu-desktop, Error: unable to locate package

    http://askubuntu.com/questions/130532/sudo-apt-get-install-ubuntu-desktop-error-unable-to-locate-pac ...

  4. Linux - 解决使用 apt-get 安装 yum 的时耗报 E: Unable to locate package yum 的错误

    问题背景 在 Linux 系统下使用 apt-get 命令安装 yum 库报错 apt-get install yum E: Unable to locate package yum 问题解决 一行命 ...

  5. Ubuntu中用sudo apt-get install makeinfo时,出错:Unable to locate package

    背景: 在准备ARM交叉编译环境时,执行命令: DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b build ...

  6. 【转】ubuntu 11.04使用apt-get安装软件时一直提示E:unable to locate package

    问题: VMware虚拟机安装了ubuntu 11.04,在使用apt-get安装软件时一直提示E:Unable to locate package. 百度了原因,说是要更新源,使用命令:sudo a ...

  7. Ubuntu : 解决更新时出现 Unable to locate package update

    当用apt-get更新软件包时常出现错误提示Unable to locate package update, 尤其是在ubuntu server上,解决方法是:     先更新apt-get      ...

  8. Ubuntu11.10 E: Unable to locate package ubuntu-restricted-extras

    最近在ubuntu11.10下安装支持多媒体播放的插件时遇到一些问题,在此小记一下. 首先是ubuntu11.10的安装,基本上是一键安装,在此不细说. 1.此版本和以前使用的ubuntu版本风格不太 ...

  9. ubuntu 安装nginx, 出现 Unable to locate package

    今天在初始化一台新的ubuntu 服务器时,敲上了 sudo apt-get install nginx 来安装nginx, 却发现提示:  Reading package lists... Done ...

随机推荐

  1. canon 打印机 连接不上 netgear 路由器

    解决方法很简单,只要把信道设置到 10以内即可.

  2. Nifi简介及核心概念整理

    简介 Apache NiFi 是一个易于使用.功能强大而且可靠的数据拉取.数据处理和分发系统,用于自动化管理系统间的数据流. 它支持高度可配置的指示图的数据路由.转换和系统中介逻辑,支持从多种数据源动 ...

  3. sql server 2012插入排序后的数据到临时表无效

    IF OBJECT_ID('TEMPDB..#list') IS NOT NULLBEGIN DROP TABLE TEMPDB.#list END CREATE TABLE #list(OFC_ID ...

  4. node核心 http模块

    node作为服务器更多的是web服务器 1.http模块 首先:http是一个协议.里面有通信机制,状态码一大堆乱七八糟的东西.自己写猴年马月都写不出来,这个对象帮我们集成.直接用 服务器对象: ht ...

  5. Ubuntu19.04的安装过程详解以及操作系统初始化配置

    Ubuntu19.04的安装过程详解以及操作系统初始化配置                                                                       ...

  6. 049-PHP输出当前文件的名称

    <?php echo __FILE__; //利用常量__FILE__输出当前文件的名称 ?>

  7. 138-PHP static后期静态绑定(一)

    <?php class test{ //创建test类 public function __construct(){ self::getinfo(); //后期静态绑定 } public sta ...

  8. vue小练习--音乐播放器

    1 首先建一个文件夹 放几首歌曲 2 看代码 1)基本版本 <!DOCTYPE html> <html lang="zh-CN"> <head> ...

  9. Linux基础操作及概念

    Linux基础操作及概念 终端的概念 通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示 ...

  10. 不得了的try catch

    try catch:几乎所有语言都有这个语句 try { //可能会导致错误的代码 } catch (error) { //在错误发生时怎么处理 }finally { //即使报错始终执行 } 1. ...