Przestał budować się obraz kontenera

Częścią obrazów kontenerów, które używam w swoich środowiskach sieciowych zarządzam samodzielnie. Ich cykliczną budową zajmuje się Jenkins. Także kontenery z obrazem samego Jenkinsa są budowane w ten sposób. 10 sierpnia coś się jednak stało. Mój skrypt przestał działać. W efekcie tego przestał budować się obraz kontenera. Wszystko ze względu na zmiany w pakietach z językiem Python w dystrybucji Alpine Linux. Jeżeli budujesz obrazy w oparciu o tą właśnie dystrybucję, to w tym artykule znajdziesz rozwiązanie.

Błąd pakietu python-dev

W jednym z kroków budowy obrazu kontenera Jenkinsa muszę doinstalować kilka dodatkowych pakietów. Zapewniają one poprawne działanie wtyczek, które używam do wykonywania różnych zadań. Wśród nich jest język Python oraz jego paczka developerska. Błąd, który widać było w logach wyglądał następująco:

Step 38/46 : RUN apk add shadow gcc libffi-dev python-dev linux-headers musl-dev openssl-dev make automake openrc
 ---> Running in 0a5112255ad6
ERROR: unsatisfiable constraints:
  python-dev (missing):
    required by: world[python-dev]

Ja w swoich skryptach budujących obraz nic nie zmieniałem. Mój skrypt korzysta jednak jako bazy z pliku Dockerfile-alpine z repozytorium https://github.com/jenkinsci/docker, który jest odpowiedzialny za instalację Jenkins-a w obrazie bazowym Alpine Linux ze środowiskiem JDK8. I właśnie w tym pliku nastąpiła zmiana.

- FROM openjdk:8-jdk-alpine
+ FROM adoptopenjdk/openjdk8:jdk8u262-b10-alpine

Została zmieniony obraz bazowy, który określony jest w regule FROM. Poza tym zmieniona została wersja Jenkinsa, który domyślnie za pomocą Dockerfile-alpine jest budowany. Pełną listę zmian w tym pliku możesz zobaczyć tutaj.

Dlaczego przestało działać?

Jeżeli pogrzebiesz głębiej i porównasz obraz openjdk:8-jdk-alpine oraz adoptopenjdk/openjdk8:jdk8u262-b10-alpine zauważysz, że bazują na różnych wersjach Alpine Linux. Drugi z nich bazuje na nowszym wydaniu dystrybucji, gdzie nastąpił podział pakietów z elementami języka Python na oddzielne dla Python2 oraz Python3. Zniknęła paczka python-dev, która zawierała pakiet developerski języka Python w wersji 2.7. Od dawna wiele dystrybucji Linuksa zawiera pakiety obu wersji języka Pyhon, dlatego konieczna była zmiana nazwy pakietów. Ponadto musimy pamiętać, że Python2 nie jest już wspierany i zalecane jest stosowanie jedynie Python3.

Rozwiązaniem mojego problemu było bardzo proste – w miejsce paczki python-dev musiałem zainstalować paczkę python3-dev. Ta drobna zmiana wymusiła oczywiście także instalację języka Python w wersji 3 wewnątrz obrazu kontenera.

- RUN apk add shadow gcc libffi-dev python-dev linux-headers musl-dev \
+ RUN apk add shadow gcc libffi-dev python3-dev linux-headers musl-dev \

Subscribe
Powiadom o
guest

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

2 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
klaus
klaus
26/11/2020 13:48

Dlatego zawsze trzeba zafiksować wersje oraz nigdy nie polegać na publicznie dostępnych pre-bildowanych image’ach.

ZdradziĆ Ci sekretY udanego projektu automatyzacji?

(link otwiera się w nowym oknie)