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
目录
相关文章
|
域名解析 Ubuntu Linux
Docker 镜像基本操作
本文介绍 Docker 镜像最常用的三个基本操作 login、pull、push以及如何登录子账户。通过认识镜像的基本操作,您可以更熟练地使用容器镜像服务 ACR。
8432 0
Docker 镜像基本操作
|
Kubernetes 容器 Perl
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
【kubernetes】解决: kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = faile...
17245 0
|
9月前
|
缓存 Ubuntu Linux
Docker Buildx 简介与安装指南
Docker Buildx 是一个强大的工具,提供了多架构构建、并行构建和高级缓存管理等功能。通过正确安装和配置 Buildx,可以显著提升 Docker 镜像的构建效率和灵活性。希望本文能帮助你更好地理解和使用 Docker Buildx,以提高开发和部署的效率。
4498 16
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
21441 5
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
安全 Linux 数据安全/隐私保护
阿里云镜像仓库:拉取和推送Docker镜像
阿里云镜像仓库:拉取和推送Docker镜像
42975 2
阿里云镜像仓库:拉取和推送Docker镜像
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
17864 1
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
129491 0
|
Docker 容器
Docker安装及镜像源修改
本文介绍了Docker的安装过程和如何修改Docker镜像源以加速下载。包括更新系统包、安装所需软件包、设置yum源、安装Docker以及验证安装是否成功。接着,提供了修改Docker镜像源的步骤,包括创建配置文件、编辑配置文件以设置镜像加速地址,并提供了几个常用的国内镜像源地址。最后,通过重启Docker服务和检查配置是否生效来完成镜像源的修改。
Docker安装及镜像源修改
|
Docker 容器
docker:记录如何在x86架构上构造和使用arm架构的镜像
为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。
9218 2