Docker build命令在COPY上失败

时间:2020-01-16 14:11:23

标签: docker

嗨,我有一个docker文件,该文件在 COPY 命令上失败。最初运行良好,但随后在构建过程中突然崩溃。 Docker文件基本上可以设置开发环境并通过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 ./

此步骤失败:

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

任何线索都将有所帮助。

1 个答案:

答案 0 :(得分:1)

您如何运行docker build命令?

docker best practices中,我读到如果您尝试使用stdin-来构建映像,则docker会失败

如果使用此语法,尝试构建使用COPY或ADD的Dockerfile将会失败。以下示例对此进行了说明:

# 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

我已转载问题...这是我的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 ./

如果我通过运行docker build -t testImage:1 [DOCKERFILE_FOLDER]创建映像,则docker将创建映像并正常工作。

但是,如果我尝试使用stdin中的相同命令,则为:

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

我收到以下错误:

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

如果您从stdin构建映像,则似乎docker从/var/lib/docker/tmp/构建映像,因此ADDCOPY命令不起作用。