본문 바로가기

Engineering/Docker

docker 빌드시 패키지 오류 해결

728x90

- "no such package", "ERROR: unable to select packages:", required by: world[xar]

- "ERROR: unable to select packages:", "so:libcrypto.so.3 (no such package):"

adoptopenjdk 사용
FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine

RUN apk upgrade && apk update
RUN apk add libzip curl unzip
RUN rm -rf /var/cache/apk/*

 

openjdk 와 alpine OS 를 같이 사용하는 위의 설정들을 많이 사용할 것이다.

그런데, xar (xar archive 관련) 명령어를 사용할 필요가 생겨서 패키지를 추가했더니 패키지를 못찾는 문제가 발생했다.

adoptopenjdk 사용
FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine

RUN apk upgrade && apk update
RUN apk add libzip curl unzip xar
RUN rm -rf /var/cache/apk/*

 

 

Alpine 패키지에서 xar 를 검색해보니 분명히 검색이 되어서 지원하는게 맞다고 같아서 혹시 Repository(community) 를 바꿔서 하면 되지 않을까 싶어서 경로를 지정해보았다.

adoptopenjdk 사용
FROM adoptopenjdk/openjdk11:jdk-11.0.10_9-alpine

RUN apk upgrade && apk update
RUN apk add libzip curl unzip 
RUN apk --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community xar
RUN rm -rf /var/cache/apk/*

 

docker 빌드를 다시 시도해보았더니 패키지 못찾는다는 에러는 지나가는 듯한데.

 

이번에는 설치에 필요한 라이브러리(libcrypto.so.3) 가 없어서 실패한다. 설마 했는데 사용중인 Alpine 환경에서 libcrypto.so 의 버전이 1 이었다. 

 

xar, libcrypto 패키지를 같이 해결하기 위해서 다른 방법을 찾아야 할거 같다.

 

 

Alpine 패키지에서 브랜치 버전을 edge 에서 3.16 으로 낮춰보니 검색이 안된다. 3.17 부터 xar 패키지가 추가된 듯하다.

 

AdoptOpenJDK 에 포함된 alpine 버전이 문제가 있는거 같아서 혹시나 AdoptOpenJDK 사이트를 확인해보니, 2021년 8월 25일부터 업데이트가 중단되어 마지막 포함된 Alpine 버전이 3.14 였다.

 

Alpine 최신 버전이 3.20 이 넘어가고 있는데, 더이상 AdoptOpenJDK 는 사용하면 안될듯 하다.

그래서 다음과 같이 최신 apine 버전을 사용하도록 바꾸고 openjdk11 만 추가해서 테스트해보니 정상적으로 이미지가 생성된다. 

Alpine 최신 사용
from alpine:latest

RUN sed 's/https/http/g' -i /etc/apk/repositories
RUN apk upgrade && apk update
run apk --no-cache add openjdk11

 

물론 xar 패키지도 정상적으로 설치된다.

 

※ 특이한거는 Alpine 이미지를 사용해서 생성한 도커 이미지 파일 사이즈가 도커 데스크탑에서 확인해보면 AdoptOpenJDK 보다 더 작더라. (물론 slim 을 사용안해서 일 수 도 있지만)


- "SSL routines:tls_post_process_server_certificate:certificate verify failed:ssl/statem/statem_clnt.c:2091:"

 

apk update 또는 add 를 사용하면 https://dl-cdn.alpinelinux.org/alpine/ 를 연결하려고 할때 ssl 오류가 발생한다.

Alpine 최신 사용
from alpine:latest

RUN apk upgrade && apk update
run apk --no-cache add openjdk11

 

해결 방법을 찾아보니, ssl 인증서를 특정 url 로 지정을 하거나 apk 명령어에 "--no-check-certificate" 옵션을 붙이면 된다고 한다.

 

또 다른 방법으로는 "--no-check-certificate" 옵션말고 repository 접속하는 주소의 모든 https 를 http 로 변경하는 것이다.

Alpine 최신 사용
from alpine:latest

RUN sed 's/https/http/g' -i /etc/apk/repositories
RUN apk upgrade && apk update
run apk --no-cache add openjdk11
run apk --no-cache add xar

 


참고 

https://stackoverflow.com/questions/70445952/how-to-disable-ssl-verification-in-alpines-apk/76809042#76809042

 

How to disable SSL verification in alpine's apk?

Is there any way to disable SSL verification at installing some packages? I found how to add my certificate in trusted certificates, but I'd rather do disable this checking. I need it to avoid foll...

stackoverflow.com