Dockerfile构建镜像过程中的错误记录及解决方法

简介: 本文记录了在一次使用Dockefile构建镜像的途中遇到的问题,以及后续的解决方法。

Dockerfile构建镜像过程中的错误记录及解决方法

目录

  1. 需求背景

  2. 错误及解决方法

    2.1 需求理解错误

    2.2 Docker build 无法解析域名

    2.3 Docker build 找不到Dockerfile文件

    2.4 镜像拉取的权限问题

1. 需求背景

一个镜像基底的Linux环境没有telnet工具,所以想要将telnet加入这个基底镜像后构建一个新的基底镜像,同时要删除安装过程中的软件包和一些缓存。

基本方法:编写dockerfile文件;使用这个dockerfile进行镜像的构建;上传镜像到镜像仓库。

2. 错误及解决方法
2.1 需求理解出错

开始博主理解错了意思,直接在一个Dockerfile文件中追加了以下的Run指令:

RUN .. \
    && .. \
    && yum install telnet -y \
    && yum clean all \
    && rm -rf /var/cache/yum/*

后和导师交流后,改成只对某个镜像基底追加安装telnet:

FROM <repository>:<tag>

RUN yum install telnet -y \
    && yum clean all \
    && rm -rf /var/cache/yum/*
2.2 Docker build 无法解析域名

开始进行 docker build 构建镜像时,就遇到了以下的问题:

[root@localhost dockerfile1]# docker build -t xx:xx .

...
 => ERROR [2/2] RUN yum install telnet -y     && yum clean all     && rm -rf /var/cache/yum/*                                   
------                                                                                                                                                                                                                                           
 > [2/2] RUN yum install telnet -y     && yum clean all     && rm -rf /var/cache/yum/*:                                                                                                                                                          
0.443 Loaded plugins: fastestmirror, ovl                                                                                                                                                                                                         
0.561 Determining fastest mirrors                                                                                                                                                                                                                
21.11 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was
21.11 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

根据百度和个人分析,发现是Linux环境网络配置出错了,无法解析这个域名。我的第一想法是,这不是容器内的网络吗,难道我要用RUN去更改配置然后再改回来?这种想法很快被我否决。为了解决(绕过)这个问题,我甚至用了离线安装包的方法让容器装上telnet,很明显这指标不治本。后来导员成功使用类似的Dockerfile进行了镜像的构建,这说明不是镜像的问题,是我的虚拟机或Docker配置的问题。

解决方法:在docker的daemon.json中追加DNS服务器地址。

# 追加到 etc/docker/daemon.json,注意JSON的格式
{
   
  "dns": ["8.8.8.8", "114.114.114.114"]
}
# 修改完daemon.json之后
systemctl daemon-reload
systemctl docker restart

# 此时docker可以正常构建镜像了
2.3 Docker build 找不到Dockerfile文件

在构建镜像时出现下面的错误:

# docker build -t <repository>:<tag> .

ERROR: failed to solve: failed to read dockerfile: open /data/docker/tmp/buildkit-mount163215541/Dockerfile: no such file or directory

解决方法:运行该指令需要进入Dockerfile的文件夹,同时Dockerfile的文件名需要是“Dockerfile",其他名称也会提示找不到该文件。可以使用-f指定Dockerfile文件。

2.4 镜像拉取的权限问题

镜像拉取时,出现了这个错误信息:'pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed.'

这是因为拉取的镜像处于受保护的状态,即私有镜像。

解决方法:使用 docker login 登入镜像仓库:

# 将会提示你输入用户名和密码
docker login your_registory_url
目录
相关文章
|
安全 关系型数据库 MySQL
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
上传自己制作的docker镜像的方法,将docker镜像上传到Docker Hub,阿里云的两种方法,以及上传镜像时可能遇见的问题和解决办法,每一步的详解和上传镜像时的规范。
10285 0
Docker 进阶 发布自己的Docker镜像 将镜像上传到阿里云和Docker Hub
|
域名解析 Ubuntu Linux
Docker 镜像基本操作
本文介绍 Docker 镜像最常用的三个基本操作 login、pull、push以及如何登录子账户。通过认识镜像的基本操作,您可以更熟练地使用容器镜像服务 ACR。
8904 0
Docker 镜像基本操作
|
缓存 Ubuntu Linux
Docker Buildx 简介与安装指南
Docker Buildx 是一个强大的工具,提供了多架构构建、并行构建和高级缓存管理等功能。通过正确安装和配置 Buildx,可以显著提升 Docker 镜像的构建效率和灵活性。希望本文能帮助你更好地理解和使用 Docker Buildx,以提高开发和部署的效率。
7366 16
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
149280 0
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
23035 5
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
安全 Linux 数据安全/隐私保护
阿里云镜像仓库:拉取和推送Docker镜像
阿里云镜像仓库:拉取和推送Docker镜像
44118 2
阿里云镜像仓库:拉取和推送Docker镜像
|
SQL 安全 程序员
宽字节注入详解
宽字节注入详解
578 0