나는 여기서 무슨 일이 일어나고 있는지 확인하려고 노력하고 있습니다. 사용자 공간에서 실행 중인 Podman은 제대로 작동했지만 서버가 하드 재부팅되었고 이제... 더 정확한 기술 평가가 부족하여 정체되었습니다.
[grant@patches2 patches]$ podman build --tag local/patches-python:latest --squash-all -f ${SCRIPT_DIR}/python_container/Dockerfile.python --build-arg "PYTHON_CONTAINER_DIR=podman-build/python_container" ${TOP_DIR}
[1/2] STEP 1/7: FROM python:3.12.0a7-slim-bullseye AS builder
[1/2] STEP 2/7: ARG PYTHON_CONTAINER_DIR
[1/2] STEP 3/7: WORKDIR /app
[1/2] STEP 4/7: RUN apt-get update && apt-get install -y build-essential libffi-dev
E: setgroups 65534 failed - setgroups (22: Invalid argument)
E: setegid 65534 failed - setegid (22: Invalid argument)
Reading package lists...
E: setgroups 65534 failed - setgroups (22: Invalid argument)
E: setegid 65534 failed - setegid (22: Invalid argument)
E: Method gave invalid 400 URI Failure message: Failed to setgroups - setgroups (22: Invalid argument)
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (112)
Error: building at STEP "RUN apt-get update && apt-get install -y build-essential libffi-dev": while running runtime: exit status 100
[grant@patches2 patches]$ cat /etc/subuid
root:200000:1001
grant:200000:1001
[grant@patches2 patches]$ cat /etc/subgid
root:200000:1001
grant:200000:1001
[grant@patches2 patches]$ podman system migrate
[grant@patches2 patches]$ podman build --tag local/patches-python:latest --squash-all -f ${SCRIPT_DIR}/python_container/Dockerfile.python --build-arg "PYTHON_CONTAINER_DIR=podman-build/python_container" ${TOP_DIR}
[1/2] STEP 1/7: FROM python:3.12.0a7-slim-bullseye AS builder
[1/2] STEP 2/7: ARG PYTHON_CONTAINER_DIR
[1/2] STEP 3/7: WORKDIR /app
[1/2] STEP 4/7: RUN apt-get update && apt-get install -y build-essential libffi-dev
E: setgroups 65534 failed - setgroups (22: Invalid argument)
E: setegid 65534 failed - setegid (22: Invalid argument)
Reading package lists...
E: setgroups 65534 failed - setgroups (22: Invalid argument)
E: setegid 65534 failed - setegid (22: Invalid argument)
E: Method gave invalid 400 URI Failure message: Failed to setgroups - setgroups (22: Invalid argument)
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (112)
Error: building at STEP "RUN apt-get update && apt-get install -y build-essential libffi-dev": while running runtime: exit status 100
[grant@patches2 patches]$ cat /etc/group | grep 65534
nobody:x:65534:
문제가 무엇인지 전혀 모르기 때문에 어디로 가야할지 조금 헤매고 있습니다.
문제의 dockerfile은 다음과 같습니다.
FROM python:3.12.0b4-slim-bookworm AS builder
ARG PYTHON_CONTAINER_DIR
WORKDIR /app
# Install build essentials for compiling C code
RUN apt-get update && apt-get install -y build-essential libffi-dev
RUN pip install --upgrade pip
# Copy files to the working directory
COPY ${PYTHON_CONTAINER_DIR}/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Production stage
FROM python:3.12.0b4-slim-bookworm
ARG PYTHON_CONTAINER_DIR
WORKDIR /app
# Copy files from the build stage
COPY --from=builder /usr/local/lib/python3.12/site-packages/ /usr/local/lib/python3.12/site-packages/
COPY ${PYTHON_CONTAINER_DIR}/generate_certificates.py .
COPY ${PYTHON_CONTAINER_DIR}/generate_certificates_entrypoint.sh .
COPY ${PYTHON_CONTAINER_DIR}/configure_nginx.py .
COPY ${PYTHON_CONTAINER_DIR}/configure_nginx_entrypoint.sh .
COPY ${PYTHON_CONTAINER_DIR}/import_keys.py .
COPY ${PYTHON_CONTAINER_DIR}/import_keys_entrypoint.sh .
COPY ${PYTHON_CONTAINER_DIR}/helper_functions.py .
RUN chmod +x ./generate_certificates_entrypoint.sh
RUN chmod +x ./configure_nginx_entrypoint.sh
RUN chmod +x ./import_keys_entrypoint.sh
이것은 아마도 Podman 내의 버그처럼 보입니까? 여기서 무엇을 봐야할지 잘 모르겠습니다.
업데이트된 subuid/subgid
[1/2] STEP 1/7: FROM python:3.12.0a7-slim-bullseye AS builder
[1/2] STEP 2/7: ARG PYTHON_CONTAINER_DIR
[1/2] STEP 3/7: WORKDIR /app
[1/2] STEP 4/7: RUN apt-get update && apt-get install -y build-essential libffi-dev
E: setgroups 65534 failed - setgroups (1: Operation not permitted)
E: setegid 65534 failed - setegid (22: Invalid argument)
E: seteuid 100 failed - seteuid (22: Invalid argument)
E: setgroups 0 failed - setgroups (1: Operation not permitted)
rm: cannot remove '/var/cache/apt/archives/partial/*.deb': Permission denied
Reading package lists...
W: chown to _apt:root of directory /var/lib/apt/lists/partial failed - SetupAPTPartialDirectory (22: Invalid argument)
W: chown to _apt:root of directory /var/lib/apt/lists/auxfiles failed - SetupAPTPartialDirectory (22: Invalid argument)
E: setgroups 65534 failed - setgroups (1: Operation not permitted)
E: setegid 65534 failed - setegid (22: Invalid argument)
E: seteuid 100 failed - seteuid (22: Invalid argument)
E: setgroups 0 failed - setgroups (1: Operation not permitted)
E: Method gave invalid 400 URI Failure message: Failed to setgroups - setgroups (1: Operation not permitted)
E: Method http has died unexpectedly!
E: Sub-process http returned an error code (112)
Error: building at STEP "RUN apt-get update && apt-get install -y build-essential libffi-dev": while running runtime: exit status 100
[grant@patches2 patches]$ cat /etc/subuid
root:200000:1001
grant:200000:65536
[grant@patches2 patches]$ cat /etc/subgid
root:200000:1001
grant:200000:65536
[grant@patches2 patches]$
답변1
grant:200000:1001
맵의 마지막 값은 UID 또는 GID가 아닌 (UID) 개수입니다. 따라서 여기서 1001은 UID 1001을 의미하는 것이 아니라 200000에서 201000 사이에 매핑 가능한 1001개 값의 풀을 의미합니다.
podman은 setuidmap/setgidmap을 사용하여 사용자 범위를 매핑합니다. 멋진 작업은 수행하지 않습니다. 현재 사용자는 0(루트)이 되고 200000에서 201000(포함) 사이의 단순 연속 범위는 1-1001에 매핑됩니다.
65534 > 1001이므로 매핑되지 않으며 컨테이너 내부에서 사용될 때 오류(EINVAL)가 발생합니다.
값 1001은 사용자를 생성할 때 시스템에서 생성되는 기본값이 아닙니다. 정상 범위는 65536으로 기존의 2^16 가능한 값과 호환되며 이러한 문제가 발생하지 않습니다.
가장 쉬운 수정은 루트로 편집 /etc/subuid
하고 /etc/subgid
1001을 65536으로 대체하여 일반적인 65536 값 범위를 얻는 것입니다. 다른 사용자와 중복되는 경우 사용하지 않는 범위를 새로 선택해야 합니다. (현재 귀하의 사용자 중 두 명이뿌리그리고승인하다동일한 매핑을 갖습니다. 서로 겹치므로 책임 관점에서 보면 좋지 않습니다.
podman run
제한된 범위의 UID/GID를 사용하는 다른 옵션 ( --uid-map
+ --gid-map
또는 else ) 이 있지만 --userns
모두 이전이나 도중에 루트 사용자와 관련된 것으로 보입니다.