Почему хозяин может вести себя более детерминированно, чем докер-контейнер?

голоса
40

Мы используем Docker, чтобы хорошо определить среду сборки и помочь с детерминистическими сборками, но на моей машине я получаю небольшое изменение в результатах сборки, используя Docker, но не тогда, когда я не использую Docker.

Я провел довольно обширное тестирование и у меня закончились идеи :(

Я тестировал на следующих системах:

  • О: Мой новый ПК без докера
  • AD1: Мой новый ПК с Docker, используя наш Докерфайл, основанный на ubuntu:18.04, скомпилированный год назад
  • AD2: Мой новый ПК с Docker, использующий наш Докер-файл, основанный на ubuntu:19:10, скомпилированный сейчас
  • В: Мой ноутбук (с которого я скопировал диск на свой новый ПК) без Docker
  • БД: Мой ноутбук с Докер
  • CD1: Рабочий ноутбук с Docker, использующий наш Dockerfile на основе ubuntu:18.04, составленный год назад
  • CD2: Рабочий ноутбук с докером, используя наш файл докера, основанный на ubuntu:19:10, скомпилированный сейчас
  • DD: Цифровой Ocean VPS с нашим Докерфайлом, основанным на ubuntu:18.04, скомпилированным сейчас

Во всех сценариях мы получили любой из двух результатов сборки, я назову вариант X и Y.

  • У нас есть вариант X с использованием A, B, CD1, CD2 и DD.
  • Получили вариант Y, используя AD1, AD2 и BD.

С момента выхода нескольких релизов нашего приложения для Android этот вопрос продолжает воспроизводиться на 100%. Он не пошел прочь когда я обновил мой Докер с 19.03.6 до 19.03.8 для того чтобы соответствовать версии моего коллеги. Мы оба имели Ubuntu 19.10 тогда, и теперь я продолжаю получать вопрос с Ubuntu 20.04.

Я всегда свеженько клонировал наш проект в новую папку, использовал расстройства для устранения проблем с сортировкой файловой системы и монтировал папку в докер-контейнер.

Сомневаюсь, что это имеет отношение к делу, но мы используем этот Докер-файл:

FROM ubuntu:18.04

RUN dpkg --add-architecture i386 && \
    apt-get update -y && \
    apt-get install -y software-properties-common && \
    apt-get update -y && \
    apt-get install -y wget \
            openjdk-8-jre-headless=8u162-b12-1 \
            openjdk-8-jre=8u162-b12-1 \
            openjdk-8-jdk-headless=8u162-b12-1 \
            openjdk-8-jdk=8u162-b12-1 \
            git unzip && \
    rm -rf /var/lib/apt/lists/* && \
    apt-get autoremove -y && \
    apt-get clean

# download and install Android SDK
ARG ANDROID_SDK_VERSION=4333796
ENV ANDROID_HOME /opt/android-sdk
RUN mkdir -p /opt/android-sdk && cd /opt/android-sdk && \
    wget -q https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_VERSION}.zip && \
    unzip *tools*linux*.zip && \
    rm *tools*linux*.zip && \
    yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses

Также здесь инструкции по сборке, которые я запускаю и получаю разные результаты. Саму разницу можно найти здесь.


Редакция: Я также подал его как жучок на докер РЕПО.

Задан 22/05/2020 в 06:40
источник пользователем
На других языках...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more