하드 재부팅 후 사용자가 사망하면서 실행 중인 podman - 메소드가 잘못된 400 URI 실패 메시지를 표시함: 그룹을 설정할 수 없음 - setgroups(22: 잘못된 인수)

하드 재부팅 후 사용자가 사망하면서 실행 중인 podman - 메소드가 잘못된 400 URI 실패 메시지를 표시함: 그룹을 설정할 수 없음 - setgroups(22: 잘못된 인수)

나는 여기서 무슨 일이 일어나고 있는지 확인하려고 노력하고 있습니다. 사용자 공간에서 실행 중인 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/subgid1001을 65536으로 대체하여 일반적인 65536 값 범위를 얻는 것입니다. 다른 사용자와 중복되는 경우 사용하지 않는 범위를 새로 선택해야 합니다. (현재 귀하의 사용자 중 두 명이뿌리그리고승인하다동일한 매핑을 갖습니다. 서로 겹치므로 책임 관점에서 보면 좋지 않습니다.

podman run제한된 범위의 UID/GID를 사용하는 다른 옵션 ( --uid-map+ --gid-map또는 else ) 이 있지만 --userns모두 이전이나 도중에 루트 사용자와 관련된 것으로 보입니다.

관련 정보