基于 Openshift 的 Docker 多阶段构建

时间:2021-06-08 09:06:39

标签: docker dockerfile openshift

我尝试使用多阶段构建在 openshift 上构建 docker 镜像。

我可以在 Linux 和 Windows 框中使用以下 Dockerfile 构建映像,但是当我尝试在 openshift 上构建它时出错。

我的 openshift 版本

OpenShift Master: v3.11.0+5407964-426
Kubernetes Master:v1.11.0+d4cacc0
OpenShift Web Console:v3.11.0+ea42280

Dockerfile 的一部分

FROM debian:buster as debian-odbc-driver
.
.

FROM continuumio/miniconda3 as builder
.
.
RUN conda config --set ssl_verify /etc/ca-bundle.trust.crt &&  \
    conda create --name myenv python=3.7.3 --no-default-packages && \
    conda create -n dask --clone myenv --offline &&  \
    conda env create -n "env" python=3.7.3 -f environment.yml &&\
    conda create -n dataduct --clone env --offline 

FROM php:7-apache
.
.
COPY --from=debian-odbc-driver /tmp/dremio-odbc_1.5.0.1001-2_amd64.deb /tmp
.
.
COPY --from=builder /opt/conda/ /home/root/test/
#The following command also not work....
#COPY --from=builder --chown=root:root /opt/conda/ /home/root/test/

错误日志

error: build error: API error (404): {"message":"Error processing tar file(exit status 1): link /conda/envs/dask/bin/clear /home/root/test/envs/dataduct/bin/clear: no such file or directory"}

相信多阶段构建可以在openshift上工作,我们可以成功地将第一阶段的镜像文件复制到php镜像中。

请就这个问题提出一些建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

您没有提供完整的 Containerfile,因此我无法重现您的错误,但请查看以下行:

复制 --from=builder /opt/conda/ /home/root/test/

您似乎正在将文件从一个容器复制到尚未退出的目标目录 (/home/root/test/)。

我们可以假设 /home/root 存在,所以尝试:/home/root/test - 另外,因为另一个 COPY 可以复制到 /tmp 中,我会将第二个 COPY 复制到 /tmp 中以隔离它是否有问题源容器或目标。