Dlaczego gospodarz może zachowywać się bardziej deterministycznie niż kontener dokujący?

głosy
40

Używamy Docker, aby dobrze zdefiniować środowisko budowy i pomóc w deterministycznych budowach, ale na mojej maszynie dostaję drobne zmiany w wynikach budowy za pomocą Docker, ale nie gdy nie używam Docker.

Przeprowadziłem dość obszerne testy i nie mam już pomysłów :(

Testowałem na następujących systemach:

  • A: Mój nowy komputer bez Dockera
  • AD1: Mój nowy PC z Docker, używając naszego Dockerfile opartego na ubuntu:18.04 skompilowanego rok temu
  • AD2: Mój nowy PC z Docker, używając naszego Dockerfile na podstawie ubuntu:19:10 skompilowany teraz
  • B: Mój laptop (z którego skopiowałem dysk do mojego nowego komputera) bez Dockera
  • BD: Mój laptop z Docker
  • CD1: Laptop współpracownika z Docker, przy użyciu naszego Dockerfile opartego na Ubuntu:18.04 skompilowanego rok temu
  • CD2: Laptop współpracownika z Docker, przy użyciu naszego Dockerfile opartego na Ubuntu:19:10, skompilowanego teraz
  • DD: Digital Ocean VPS z naszym Dockerfile opartym na Ubuntu:18.04 skompilowanym teraz

We wszystkich scenariuszach otrzymaliśmy jeden z dwóch wyników budowy, które będę nazywał wariantem X i Y.

  • Mamy wariant X wykorzystujący A, B, CD1, CD2 i DD.
  • Mamy wariant Y wykorzystujący AD1, AD2 i BD.

Problem ten jest w 100% powtarzalny od kilku wydań naszej aplikacji dla systemu Android. Nie zniknął, gdy zaktualizowałem Docker z 19.03.6 do 19.03.8, aby dopasować go do wersji mojego współpracownika. Oboje mieliśmy wtedy Ubuntu 19.10, a ja teraz wciąż mam problem z Ubuntu 20.04.

Zawsze świeżo klonowałem nasz projekt do nowego folderu, używałem disorderfów do eliminacji problemów z sortowaniem w systemie plików i montowałem folder w kontenerze dokującym.

Wątpię, czy jest to istotne, ale używamy tego pliku 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

Również tutaj są instrukcje budowania, które uruchamiam i otrzymuję różne wyniki. Sama różnica znajduje się tutaj.


Edycja: Zgłosiłem to również jako błąd w repo dokera.

Utwórz 22/05/2020 o 06:40
źródło użytkownik
W innych językach...                            

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