Многоступенчатая сборка Docker на Openshift

#docker #dockerfile #openshift

Вопрос:

Я пытаюсь использовать многоступенчатую сборку для создания образа docker на openshift.

Я могу создать образ, используя следующий файл Dockerfile в Linux и Windows, но при попытке создать его на 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 amp;amp;  
    conda create --name myenv python=3.7.3 --no-default-packages amp;amp; 
    conda create -n dask --clone myenv --offline amp;amp;  
    conda env create -n "env" python=3.7.3 -f environment.yml amp;amp;
    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:

Вы не предоставили полный файл контейнера, поэтому я не могу воспроизвести вашу ошибку, но взгляните на эту строку:

КОПИРОВАТЬ —из=builder /opt/conda/ /главная/root/тест/

Похоже, вы копируете файлы из одного контейнера в целевой каталог (/home/root/test/), который еще не вышел.

Мы можем предположить, что /home/root существует, поэтому попробуйте: /home/root/test — кроме того, поскольку другая КОПИЯ работает для копирования в /tmp, я бы продублировал вторую КОПИЮ в /tmp, чтобы определить, проблема ли это с исходным контейнером или с целью.