首页 > 解决方案 > Docker 构建命令在 COPY 上失败

问题描述

嗨,我有一个 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

这方面的任何线索都会有所帮助。

标签: docker

解决方案


你是如何运行 docker build 命令的?

docker 最佳实践中,我读到如果您尝试stdin使用-

如果使用此语法,尝试构建使用 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

如果您从标准输入构建图像,则docker build images from 似乎/var/lib/docker/tmp/,因此ADDCOPY命令不起作用。


推荐阅读