Alpine Linux 이미지(3.13 이후)를 Raspberry Pi의 Docker 환경에서 사용할 때 고려할 사항

개시하다

  • Raspberry Pi의 Docker 환경에서 최신 Alpine Linux 이미지를 사용하려는 중 문제 발생
  • 컨테이너를 정상적으로 사용할 수 있을 때까지 정보를 보존
  • 컨디션

  • Raspberry Pi 2 Model B Rev 1.2
  • Raspberry Pi OS Lite(32bit) - January 11th 2021
  • Docker 20.10.4
  • Docker Image
  • alpine:latest (as 3.13.2)
  • 무슨 일이 있었는지


    apk 업데이트 실패


    $ docker run -it alpine:latest sh
    / # apk update
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/armhf/APKINDEX.tar.gz
    ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/main: temporary error (try again later)
    WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/armhf/APKINDEX.tar.gz
    ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/community: temporary error (try again later)
    WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory
    2 errors; 14 distinct packages available
    

    데이터 실패


    / # date
    Sun Jan  0 00:100:33238  1900
    

    Alpine Linux 공식에

  • Release Notes for Alpine 3.13.0
  • musl 1.2


    musl has been upgraded to 1.2. This release changes the definition of time_t on 32-bit systems. See the musl time64 release notes for more details.

    time64 requirements


    The following important information applies for users of x86, armv7, and armhf (currently supported 32-bit architectures), including 32-bit Docker containers on 64-bit hosts.
    (snip)
    In order to run under old Docker or libseccomp versions, the moby default seccomp profile should be downloaded and on line 2, defaultAction changed to SCMP_ACT_TRACE, then --seccomp-profile=default.json can be passed to dockerd, or --security-opt=seccomp=default.json passed to docker create or docker run. This will cause the system calls to return ENOSYS instead of EPERM, allowing the container to fall back to 32-bit time system calls. In this case, the container will not be compatible with dates past 2038.
    Alternatively, --security-opt=seccomp=unconfined can be passed with no default.json required, but note that this will reduce the security of the host against malicious code in the container.musl라는 프로그램 라이브러리의 업데이트로 32비트 환경에서 시간과 관련된 규격 변경이 있을 것 같아서 이를 피하기 위해 --security-opt=seccomp=unconfined라는 옵션docker run을 추가할 수 있습니다.--security-opt=seccomp=unconfined 컨테이너는 안전등급이 낮아져 사용 시 주의가 필요하다.

    실제로 해봤어요.


    apk 업데이트 성공했습니다.


    $ docker run -it --security-opt=seccomp=unconfined alpine:latest sh
    / # apk update
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/armhf/APKINDEX.tar.gz
    fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/armhf/APKINDEX.tar.gz
    v3.13.2-48-gab9fbf8bd8 [https://dl-cdn.alpinelinux.org/alpine/v3.13/main]
    v3.13.2-47-gc4030f9597 [https://dl-cdn.alpinelinux.org/alpine/v3.13/community]
    OK: 12247 distinct packages available
    

    데이터도 성공했어요.


    / # date
    Mon Mar  1 03:00:00 UTC 2021
    

    docker-compose.그럼 어떡하지?


    이런 느낌으로 갔어요.
    services:
      alpine:
        image: alpine:latest
        container_name: alpine
        command: sh
        tty: true
        security_opt:
          - seccomp=unconfined
    

    총결산


    Alpine Linux 이미지는 Raspberry Pi의 Docker 환경에서 올바르게 처리됩니다.랩버리피뿐만 아니라 32비트 환경에서 이번 대응을 하지 않으면 컨테이너를 제대로 사용할 수 없을 것 같다.
    Have a happy tech life!

    좋은 웹페이지 즐겨찾기