How can I inspect the file system of a failed `docker build`?

后端 未结 5 576
孤独总比滥情好
孤独总比滥情好 2020-12-12 08:38

I\'m trying to build a new Docker image for our development process, using cpanm to install a bunch of Perl modules as a base image for various projects.

<
5条回答
  •  天命终不由人
    2020-12-12 09:42

    Debugging build step failures is indeed very annoying.

    The best solution I have found is to make sure that each step that does real work succeeds, and adding a check after those that fails. That way you get a committed layer that contains the outputs of the failed step that you can inspect.

    A Dockerfile, with an example after the # Run DB2 silent installer line:

    #
    # DB2 10.5 Client Dockerfile (Part 1)
    #
    # Requires
    #   - DB2 10.5 Client for 64bit Linux ibm_data_server_runtime_client_linuxx64_v10.5.tar.gz
    #   - Response file for DB2 10.5 Client for 64bit Linux db2rtcl_nr.rsp 
    #
    #
    # Using Ubuntu 14.04 base image as the starting point.
    FROM ubuntu:14.04
    
    MAINTAINER David Carew 
    
    # DB2 prereqs (also installing sharutils package as we use the utility uuencode to generate password - all others are required for the DB2 Client) 
    RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y sharutils binutils libstdc++6:i386 libpam0g:i386 && ln -s /lib/i386-linux-gnu/libpam.so.0 /lib/libpam.so.0
    RUN apt-get install -y libxml2
    
    
    # Create user db2clnt
    # Generate strong random password and allow sudo to root w/o password
    #
    RUN  \
       adduser --quiet --disabled-password -shell /bin/bash -home /home/db2clnt --gecos "DB2 Client" db2clnt && \
       echo db2clnt:`dd if=/dev/urandom bs=16 count=1 2>/dev/null | uuencode -| head -n 2 | grep -v begin | cut -b 2-10` | chgpasswd && \
       adduser db2clnt sudo && \
       echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
    
    # Install DB2
    RUN mkdir /install
    # Copy DB2 tarball - ADD command will expand it automatically
    ADD v10.5fp9_linuxx64_rtcl.tar.gz /install/
    # Copy response file
    COPY  db2rtcl_nr.rsp /install/
    # Run  DB2 silent installer
    RUN mkdir /logs
    RUN (/install/rtcl/db2setup -t /logs/trace -l /logs/log -u /install/db2rtcl_nr.rsp && touch /install/done) || /bin/true
    RUN test -f /install/done || (echo ERROR-------; echo install failed, see files in container /logs directory of the last container layer; echo run docker run '' /bin/cat /logs/trace; echo ----------)
    RUN test -f /install/done
    
    # Clean up unwanted files
    RUN rm -fr /install/rtcl
    
    # Login as db2clnt user
    CMD su - db2clnt
    

提交回复
热议问题