Potrzebuję obraz Dockera, który będzie zawierał:
- janus-pp-rec
- ffmpeg
- Java 11 JDK
Tworzę obraz Dockera z multi-stage build, czyli:
FROM swmansion/janus-gateway:latest as janus
FROM jrottenberg/ffmpeg:latest as ffmpeg
FROM eclipse-temurin:11 as java
COPY --from=janus / /
COPY --from=ffmpeg / /
Czyli bierzemy 3 gotowe obrazy i do ostatniego kopiujemy pliki z 2 poprzednich. Skopiowanie tylko /usr/local
lub /usr
kończy się tym, że brakuje bibliotek. Natomiast jeśli zbuduję obraz tak jak powyżej, to występują konflikty, prawdopodobnie niezgodne wersje bibliotek:
$ docker container exec videoprocessing janus-pp-rec
janus-pp-rec: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0)
janus-pp-rec: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /usr/lib/x86_64-linux-gnu/libavutil.so.56)
janus-pp-rec: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/lib/x86_64-linux-gnu/libavutil.so.56)
...
janus-pp-rec: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.25' not found (required by /usr/lib/x86_64-linux-gnu/libopenmpt.so.0)
...
$ docker container exec videoprocessing ffmpeg
ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
Jak uniknąć konfliktów bibliotek? Czy Linux zawiera jakieś mechanizmy, żeby jednocześnie mogło być wiele wersji bibliotek? Może macie inny pomysł?