Docker build如何调试

前言

Docker编译dockerfile的过程中,经常会碰到构建失败,那么怎样去调试dockerfile呢?
其实Docker编译的时候为每一条编译指令会建立一个临时的镜像,当编译CMD失败时,会保留前一份镜像,我们可以进到这个镜像,然后手动运行下一条CMD,查看编译错误信息。

创建dockerfile

  • mkdir tmp && cd tmp

  • vim Dockerfile

    1
    2
    3
    4
    FROM alpine:3.9
    COPY . /app
    RUN make /app
    CMD python /app/app.py

编译dockerfile

  • docker build -t docker-alpine-test:0.1 .

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sending build context to Docker daemon  2.048kB
    Step 1/4 : FROM alpine:3.9
    ---> 78a2ce922f86
    Step 2/4 : COPY . /app
    ---> 2b756be83925
    Step 3/4 : RUN make /app
    ---> Running in 922354c938e3
    /bin/sh: make: not found
    The command '/bin/sh -c make /app' returned a non-zero code: 127

  • $ docker images

    1
    2
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    <none> <none> 2b756be83925 9 minutes ago 5.55MB
  • 可以看到docker保留了前一个运行成功的镜像2b756be83925

调试镜像

  • docker run -it 2b756be83925 /bin/sh

    1
    2
    3
    4
    5
    6
    7
    8
    / # ls
    app bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
    / # ls /app/
    Dockerfile
    / # make /app
    /bin/sh: make: not found
    / # python /app/app.py
    /bin/sh: python: not found

Reference