(七)dockerfile除錯
(1)dockerfile除錯程序
-
從 base 鏡像運行一個容器,
-
執行一條指令,對容器做修改,
-
執行類似 docker commit 的操作,生成一個新的鏡像層,
-
Docker 再基于剛剛提交的鏡像運行一個新容器,
-
重復 2-4 步,直到 Dockerfile 中的所有指令執行完畢,
從這個程序可以看出,如果 Dockerfile 由于某種原因執行到某個指令失敗了,我們也將能夠得到前一個指令成功執行構建出的鏡像,這對除錯 Dockerfile 非常有幫助,我們可以運行最新的這個鏡像定位指令失敗的原因,
例如:Dockerfile 內容如下
root@cuiyongchao:/dockerfile# cat Dockerfile
FROM busybox
RUN touch tmpfile
RUN /bin/bash -c echo "zhangsan is lisi"
COPY testfile /
執行docker built:
root@cuiyongchao:/dockerfile# docker build -t iamge-debug .
Sending build context to Docker daemon 3.072kB
Step 1/4 : FROM busybox
latest: Pulling from library/busybox
9758c28807f2: Pull complete
Digest: sha256:a9286defaba7b3a519d585ba0e37d0b2cbee74ebfe590960b0b1d6a5e97d1e1d
Status: Downloaded newer image for busybox:latest
---> f0b02e9d092d
Step 2/4 : RUN touch tmpfile
---> Running in 6ec24996c8fa
Removing intermediate container 6ec24996c8fa
---> c7bef448b12f
Step 3/4 : RUN /bin/bash -c echo "zhangsan is lisi"
---> Running in 8e8f2f1fff93
/bin/sh: /bin/bash: not found
The command '/bin/sh -c /bin/bash -c echo "zhangsan is lisi"' returned a non-zero code: 127
root@cuiyongchao:/dockerfile#
? Dockerfile 在執行第三步 RUN 指令時失敗,我們可以利用第二步創建的鏡像 c7bef448b12f 進行除錯,方式是通過 docker run -it 啟動鏡像的一個容器,
root@cuiyongchao:/dockerfile# docker run -it c7bef448b12f
/ # /bin/bash
sh: /bin/bash: not found
/ #
? 手工執行 RUN 指令定位失敗的原因是 busybox 鏡像中沒有 bash,雖然這是個極其簡單的例子,但它很好地展示了除錯 Dockerfile 的方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/199905.html
標籤:其他
