Alpine을 기본 이미지로 사용할 때 사용자를 추가하려면 어떻게해야합니까?


106

내가 사용하고 alpine내 Dockerfile의 기본 이미지로 (알파인 기반으로하는 이미지 또는). 사용자를 생성하려면 어떤 지침을 추가해야합니까?

결국이 사용자를 사용하여 루트 사용자가 수행하지 않도록 컨테이너에 배치 할 애플리케이션을 실행할 것입니다.

답변:


219

알파인 명령을 사용 adduser하고 addgroup(대신 사용자 및 그룹을 생성 useradd하고 usergroup).

FROM alpine:latest

# Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# Tell docker that all future commands should run as the appuser user
USER appuser

에 대한 플래그 adduser는 다음과 같습니다.

사용법 : adduser [OPTIONS] USER [GROUP]

새 사용자를 만들거나 USER를 GROUP에 추가

        -h DIR 홈 디렉토리
        -g GECOS GECOS 필드
        -s SHELL 로그인 쉘
        -G GRP 그룹
        -S 시스템 사용자 생성
        -D 암호를 지정하지 마십시오
        -H 홈 디렉토리를 만들지 않음
        -u UID 사용자 ID
        -k SKEL 스켈레톤 디렉토리 (/ etc / skel)

새로운 사용자 공식 문서 추가


7
또는 USER 405Alpine Linux 내의 게스트 사용자 인 다음 을 사용하여 위의 전체 스 니펫을 대체 할 수 있습니다 .
Daniel Gartmann

8
왜 안돼 USER guest?
user672009

3
Linux에서 docker를 실행할 때 권한 문제가 없도록 해당 사용자가 호스트 OS의 UID / GID와 동일한 UID / GID를 갖기를 원하기 때문에 새 사용자를 생성 할 것입니다. (macOS / Windows 사용자에게는 문제가
아님

5
알파인 비지 박스를 기반으로하고 있기 때문에, 그 점에 유의 adduser하고 addgroup명령 상이 adduser하고 addgroup데비안 우분투 의해 제공 차례로 선단에있는 useradd그리고 groupadd. 특히 Debian 및 Ubuntu 명령은 긴 형식 옵션 만 지원합니다. 참조 : manpages.debian.org/stretch/adduser/adduser.8.en.html
Jack

도커 컨테이너를 이미 만들었습니다. 이제 사용자를 추가하려면 어떤 명령을 실행해야합니까?
Aashish Kumar

65

명령은 adduseraddgroup입니다.

다음은 busybox 환경 (알파인) 및 Debian 기반 환경 (Ubuntu 등)에서 사용할 수있는 Docker 용 템플릿입니다.

ENV USER=docker
ENV UID=12345
ENV GID=23456

RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "$(pwd)" \
    --ingroup "$USER" \
    --no-create-home \
    --uid "$UID" \
    "$USER"

다음 사항에 유의하십시오.

  • --disabled-password 암호를 묻는 메시지를 방지합니다.
  • --gecos "" 데비안 기반 시스템에서 "전체 이름"등의 프롬프트를 피합니다.
  • --home "$(pwd)"사용자의 집을 WORKDIR로 설정합니다. 이것을 원하지 않을 수도 있습니다.
  • --no-create-home cruft가 디렉토리로 복사되는 것을 방지합니다. /etc/skel

이러한 애플리케이션에 대한 사용법 설명 에는 adduseraddgroup 에 대한 코드에 있는 긴 플래그없습니다 .

다음 긴 형식의 플래그는 알파인 및 데비안 파생 모두에서 작동합니다.

사용자 추가

BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.

Usage: adduser [OPTIONS] USER [GROUP]

Create new user, or add USER to GROUP

        --home DIR           Home directory
        --gecos GECOS        GECOS field
        --shell SHELL        Login shell
        --ingroup GRP        Group (by name)
        --system             Create a system user
        --disabled-password  Don't assign a password
        --no-create-home     Don't create home directory
        --uid UID            User id

한 가지 유의해야 할 점은이 --ingroup설정되지 않은 경우 GID가 UID와 일치하도록 할당된다는 것입니다. 제공된 UID에 해당하는 GID가 이미 존재하는 경우 adduser가 실패합니다.

addgroup

BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.

Usage: addgroup [-g GID] [-S] [USER] GROUP

Add a group or add a user to a group

        --gid GID  Group id
        --system   Create a system group

컨테이너를 호스트 UID / GID로 실행 하기 위해 fixuid 프로젝트에 대한 자체 대안을 작성하는 동안이 모든 것을 발견했습니다 .

내 진입 점 도우미 스크립트 는 GitHub에서 찾을 수 있습니다.

의도는 ENTRYPOINTDocker가 관련 바인드 마운트에서 UID 및 GID를 유추 하도록 하는 첫 번째 인수로 해당 스크립트를 앞에 추가하는 것 입니다.

권한을 유추해야하는 위치를 결정하려면 환경 변수 "TEMPLATE"가 필요할 수 있습니다.

(작성 당시에는 스크립트에 대한 문서가 없습니다. 아직 할 일 목록에 있습니다 !!)


11
+1, 명령 인수에 긴 형식을 사용하면 가독성이 향상되고 유지 관리가 더 쉬워집니다. 쉘 스크립트를 작성할 때 항상 긴 형식을 사용하십시오 (Dockerfile RUN 쉘 스크립트 일뿐 입니다 ).
Victor Schröder 19 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.