docker - 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 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/
,因此ADD
或COPY
命令不起作用。
推荐阅读
- c++ - 快速排序算法引发异常(部分解决)
- javascript - 即使对于 2 个谷歌表之间的 MATCH 值,仍然返回 FALSE?
- r - 有没有办法在不同的数据集上使用由 lm() 生成的模型?
- mongodb - 具有不同索引大小的 JSON 对象的架构
- python-requests - 有没有办法在不下载文件的情况下访问存储在 Google Cloud Storage 上的 URL 中的 NetCDF 的内容?
- c++ - 如何使用 C++ 生成以下模式?
- discord - Discord.JS 一个机器人,它会根据命令在特定频道中说些什么
- c - 在 c 中打印回文钻石
- python - 是否可以一次编码多个选定的列?
- laravel - 为什么显示此错误:foreach() 提供的参数无效?