第 3 章 镜像 - 015 - 调试 Dockerfile

如何 debug Dockerfile

通过 Dockerfile 构建镜像的过程

  1. 从 base 镜像运行一个容器
  2. 执行命令对容器做修改
  3. 执行类似 docker commit 的操作,生成一个新的镜像层
  4. Docker 再基于刚刚提交的镜像运行一个新容器
  5. 重复 2-4 步,直到 Dockerfile 中的所有指令执行完毕

如果 Dockerfile 由于某种原因执行到某个指令失败了,我们也将能够得到前一个指令成功执行构建出的镜像,可以运行最新的这个镜像定位指令失败的原因。

举个例子

Dockerfile

1 FROM busybox
2 RUN touch tmpfile
3 RUN /bin/bash -c echo "continue to build ....."
4 COPY testfile /

构建过程如下

 1 [email protected]:~# cat Dockerfile
 2 FROM busybox
 3 RUN touch tmpfile
 4 RUN /bin/bash -c echo "continue to build ....."
 5 COPY testfile /
 6 [email protected]:~#
 7 [email protected]:~# docker build -t image-debug .
 8 Sending build context to Docker daemon  23.04kB
 9 Step 1/4 : FROM busybox
10 latest: Pulling from library/busybox
11 57c14dd66db0: Pull complete
12 Digest: sha256:b6e640a3768c460ad6066a003b6da52034c31aaf8500f9263057ddffcd830ef6
13 Status: Downloaded newer image for busybox:latest
14  ---> 3a093384ac30
15 Step 2/4 : RUN touch tmpfile
16  ---> Running in 3ba6dbde130c
17 Removing intermediate container 3ba6dbde130c
18  ---> 3043ba551c41
19 Step 3/4 : RUN /bin/bash -c echo "continue to build ....."
20  ---> Running in a16303c0b2f7
21 /bin/sh: /bin/bash: not found
22 The command ‘/bin/sh -c /bin/bash -c echo "continue to build ....."‘ returned a non-zero code: 127

21行出现错误,可以使用 3043ba551c41 进行调试。

1 [email protected]:~# docker run -it 3043ba551c41
2 / # /bin/bash -c echo "continue to build ....."
3 sh: /bin/bash: not found
4 / #

手工执行 RUN 指令很容易定位失败的原因是 busybox 镜像中没有 bash。

------------引用来自------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587606&idx=1&sn=656e82adf088ae2652d245dc49b94873&chksm=8d30808fba470999569781cb1f8db769126769717f8899993cab6e4c36c65da0ed4a3205cf99&scene=21#wechat_redirect

原文地址:https://www.cnblogs.com/gsophy/p/10221885.html

时间: 2024-11-03 22:13:24

第 3 章 镜像 - 015 - 调试 Dockerfile的相关文章

调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)

包括 Dockerfile 在内的任何脚本和程序都会出错.有错并不可怕,但必须有办法排查,所以本节讨论如何 debug Dockerfile. 先回顾一下通过 Dockerfile 构建镜像的过程: 从 base 镜像运行一个容器. 执行一条指令,对容器做修改. 执行类似 docker commit 的操作,生成一个新的镜像层. Docker 再基于刚刚提交的镜像运行一个新容器. 重复 2-4 步,直到 Dockerfile 中的所有指令执行完毕. 从这个过程可以看出,如果 Dockerfile

第 3 章 镜像 - 013 - Dockerfile 构建镜像

第一个 Dockerfile 1 FROM ubuntu 2 RUN apt-get update && apt-get install -y vim 运行 docker build 命令构建镜像并详细分析每个细节 1 [email protected]:~# pwd 2 /root 3 [email protected]:~# 4 [email protected]:~# cat Dockerfile 5 FROM ubuntu 6 RUN apt-get update &&am

docker 镜像制作及dockerfile

一.docker images 的内容,包括: 使用和管理本地主机上的 images 创建一个基础的 images 上传 images 到docker hub (公共 images 仓库) 列出本地主机上已经存在的 images 二.docker images 是docker的三大组件之一 REPOSITORY:来自于哪个仓库,比如 docker.io/centos TAG的标记,比如  latest IMAGE ID:镜像它的 ID 号 CREATED:创建时间 SIZE:镜像的 SIZE i

Docker定制容器镜像(利用Dockerfile文件)

1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [[email protected] myfiles]# mkdir centos6.8_dockerfile [[email protected] myfiles]# [[email protected] myfiles]# cd centos6.8_dockerfile/ 创建dockerfile文件(vim Dockerfile) #

第十九章 排查和调试Web程序 之 防止和排查运行时问题

1. 概述 常见的几种运行时问题包括 错误数据.慢于预期的响应.未知行为 或者 未处理的异常. Visual Studio 提供了 排查.跟踪 和 日志 等工具 来帮助排查系统的问题.有些情况还需要插入诊断代码. 本章内容包括:排查性能.安全问题和运行时错误, 实现跟踪.日志(包括使用attributes) 和 调试(包括 IntelliTrace),使用代码契约来加强条件验证,启用和配置健康监视. 2. 主要内容 2.1 排查性能问题.安全问题和运行时错误 性能问题会让用户有挫败感 安全问题可

第六章 函数和调试

在本章中,你将学习以下两方面的基本知识: 函数 使用Python调试包pdb 函数是程序重要的组成部分,你将在第七章中使用它们,并学习如何使用随机化来模拟DNA突变.Python调试包pdb可以将程序放缓,按步执行找到出错的地方. 1.函数 函数是组织好的代码块,并提供一种方法(函数名称)可以传递一些值进行计算,然后返回结果.程序可以通过调用函数名称来使用函数中的代码,将函数所需的值传递给函数中的代码,然后返回结果,这种方式使用或“调用”通常称为调用函数.Python有许多内建的函数,例如上述使

第1章 Eclipse断点调试

1.1 Eclipse断点调试概述Eclipse的断点调试可以查看程序的执行流程和解决程序中的bug1.2 Eclipse断点调试常用操作:A:什么是断点:就是一个标记,从哪里开始.B:如何设置断点:你想看哪里的程序,你就在那个有效程序的左边双击即可.C:在哪里设置断点:哪里不会点哪里.目前:我们就在每个方法的第一条有效语句上都加.D:如何运行设置断点后的程序:右键 -- Debug as -- Java ApplicationE:看哪些地方:Debug:断点测试的地方在这个地方,记住F6,或者

第 3 章 镜像 - 018 - 镜像命名的最佳实践

为镜像命名 创建镜像时 docker build 命令时已经为镜像取了个名字,例如:  docker build -t ubuntu-with-vi 这里的 ubuntu-with-vi 就是镜像的名字.通过 dock images 可以查看镜像的信息. 1 [email protected]:~# docker images ubuntu-with-vi 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 ubuntu-with-vi latest b5410df

第 3 章 镜像 - 019 - 使用公共 Registry

保存和分发镜像的最直接方法就是使用 Docker Hub.https://hub.docker.com/ Docker Hub 是 Docker 公司维护的公共 Registry.用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中.如果不希望别人访问自己的镜像,也可以购买私有 repository. 除了 Docker Hub,quay.io 是另一个公共 Registry,提供与 Docker Hub 类似的服务. 下面介绍如何用 Docker Hub 存取我们