Warum könnte sich der Gastgeber deterministischer verhalten als ein Andockcontainer?

stimmen
40

Wir verwenden Docker, um die Build-Umgebung gut zu definieren und bei deterministischen Builds zu helfen, aber auf meinem Rechner erhalte ich eine winzige Änderung in den Build-Ergebnissen, wenn ich Docker verwende, aber nicht, wenn ich Docker nicht verwende.

Ich habe ziemlich umfangreiche Tests durchgeführt und habe keine Ideen mehr :(

Ich habe auf den folgenden Systemen getestet:

  • A: Mein neuer PC ohne Docker
  • AD1: Mein neuer PC mit Docker, unter Verwendung unserer Dockerdatei basierend auf ubuntu:18.04 kompiliert vor einem Jahr
  • AD2: Mein neuer PC mit Docker, unter Verwendung unserer Dockerdatei basierend auf ubuntu:19:10 jetzt kompiliert
  • B: Mein Laptop (von dem ich die Diskette auf meinen neuen PC kopiert hatte) ohne Docker
  • BD: Mein Laptop mit Docker
  • CD1: Laptop eines Mitarbeiters mit Docker, unter Verwendung unserer Dockerdatei basierend auf ubuntu:18.04 kompiliert vor einem Jahr
  • CD2: Laptop des Mitarbeiters mit Docker, unter Verwendung unserer Dockerdatei basierend auf ubuntu:19:10 jetzt kompiliert
  • DD: Ein Digital Ocean VPS mit unserem Dockerfile basierend auf ubuntu:18.04 jetzt kompiliert

In allen Szenarien erhielten wir eines von zwei Build-Ergebnissen, die ich Variante X und Y nennen werde.

  • Wir haben die Variante X mit A, B, CD1, CD2 und DD.
  • Wir haben die Variante Y mit AD1, AD2 und BD.

Das Problem ist seit mehreren Versionen unserer Android-App zu 100% reproduzierbar. Es ist nicht verschwunden, als ich meinen Docker vom 19.03.6 auf den 19.03.8 aktualisiert habe, damit er der Version meines Mitarbeiters entspricht. Damals hatten wir beide Ubuntu 19.10 und jetzt bekomme ich das Problem immer wieder mit Ubuntu 20.04.

Ich habe unser Projekt immer frisch in einen neuen Ordner geklont, Störungen verwendet, um Probleme beim Sortieren des Dateisystems zu beseitigen, und den Ordner in den Docker-Container gemountet.

Ich bezweifle, dass es relevant ist, aber wir verwenden dieses Dockerfile:

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

Hier sind auch die Bauanweisungen, die ich ausführe und unterschiedliche Ergebnisse erziele. Das Diff selbst ist hier zu finden.


Bearbeiten: Ich habe es auch als Fehler im Docker-Repo eingereicht.

Veröffentlicht am 22/05/2020 um 06:40
quelle vom benutzer
In anderen Sprachen...                            

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