CyberPunk
CyberPunk

Reputation: 1447

Docker build command fails on COPY

Hi I have a docker file which is failing on the COPY command. It was running fine initially but then it suddenly crashed during the build process. The Docker file basically sets up the dev environment and authenticate with GCP.

FROM ubuntu:16.04

## ENV Variables
ENV PYTHON_VERSION="3.6.5"
ENV BUCKET_NAME='detection-sandbox'
ENV DIRECTORY='/usr/local/gcloud'

# Update and Install packages
RUN apt-get update -y \
 && apt-get install -y \
 curl \
 wget \
 tar \
 xz-utils \
 bc \
 build-essential \
 cmake \
 curl \
 zlib1g-dev \
 libssl-dev \
 libsqlite3-dev \
 python3-pip \
 python3-setuptools \
 unzip \
 g++ \
 git \
 python-tk

 # Install Python 3.6.5
RUN wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz \
    && tar -xvf Python-${PYTHON_VERSION}.tar.xz \
    && rm -rf Python-${PYTHON_VERSION}.tar.xz \
    && cd Python-${PYTHON_VERSION} \
    && ./configure \
    && make install \
    && cd / \
    && rm -rf Python-${PYTHON_VERSION}

# Install pip
RUN curl -O https://bootstrap.pypa.io/get-pip.py \
    && python3 get-pip.py \
    && rm get-pip.py

# Add SNI support to Python
RUN pip --no-cache-dir install \
        pyopenssl \
        ndg-httpsclient \
        pyasn1

## Download and Install Google Cloud SDK
RUN mkdir -p /usr/local/gcloud \
    && curl https://sdk.cloud.google.com > install.sh \
    && bash install.sh --disable-prompts --install-dir=${DIRECTORY}

# Adding the package path to directory
ENV PATH $PATH:${DIRECTORY}/google-cloud-sdk/bin

# working directory
WORKDIR /usr/src/app

COPY requirements.txt ./ \
     testproject-264512-9de8b1b35153.json ./

It fails at this step :

Step 13/21 : COPY requirements.txt ./      testproject-264512-9de8b1b35153.json ./
COPY failed: stat /var/lib/docker/tmp/docker-builder942576416/testproject-264512-9de8b1b35153.json: no such file or directory

Any leads in this would be helpful.

Upvotes: 0

Views: 11755

Answers (2)

Digital_Reality
Digital_Reality

Reputation: 4738

Incorrect path in source is a common error.

Use

COPY ./directory/testproject-264512-9de8b1b35153.json /dir/

instead of

COPY testproject-264512-9de8b1b35153.json /dir/

Upvotes: 1

Alvaro Niño
Alvaro Niño

Reputation: 567

How are you running docker build command?

In docker best practices I've read that docker fails if you try to build your image from stdin using -

Attempting to build a Dockerfile that uses COPY or ADD will fail if this syntax is used. The following example illustrates this:

# create a directory to work in
mkdir example
cd example

# create an example file
touch somefile.txt

docker build -t myimage:latest -<<EOF
FROM busybox
COPY somefile.txt .
RUN cat /somefile.txt
EOF

# observe that the build fails
...
Step 2/3 : COPY somefile.txt .
COPY failed: stat /var/lib/docker/tmp/docker-builder249218248/somefile.txt: no such file or directory

I've reproduced issue... Here is my Dockerfile:

FROM alpine:3.7

## ENV Variables
ENV PYTHON_VERSION="3.6.5"
ENV BUCKET_NAME='detection-sandbox'
ENV DIRECTORY='/usr/local/gcloud'

# working directory
WORKDIR /usr/src/app

COPY kk.txt ./ \
     kk.2.txt ./

If I create image by running docker build -t testImage:1 [DOCKERFILE_FOLDER], docker creates image and works correctly.

However if I try the same command from stdin as:

docker build -t test:2 - <<EOF
FROM alpine:3.7

ENV PYTHON_VERSION="3.6.5"
ENV BUCKET_NAME='detection-sandbox'
ENV DIRECTORY='/usr/local/gcloud'

WORKDIR /usr/src/app

COPY kk.txt ./      kk.2.txt ./
EOF

I get the following error:

Step 1/6 : FROM alpine:3.7
 ---> 6d1ef012b567
Step 2/6 : ENV PYTHON_VERSION="3.6.5"
 ---> Using cache
 ---> 734d2a106144
Step 3/6 : ENV BUCKET_NAME='detection-sandbox'
 ---> Using cache
 ---> 18fba29fffdc
Step 4/6 : ENV DIRECTORY='/usr/local/gcloud'
 ---> Using cache
 ---> d926a3b4bc85
Step 5/6 : WORKDIR /usr/src/app
 ---> Using cache
 ---> 57a1868f5f27
Step 6/6 : COPY kk.txt ./      kk.2.txt ./
COPY failed: stat /var/lib/docker/tmp/docker-builder518467298/kk.txt: no such file or directory

It seems that docker build images from /var/lib/docker/tmp/ if you build image from stdin, thus ADD or COPY commands don't work.

Upvotes: 3

Related Questions