내가 사용하고 alpine
내 Dockerfile의 기본 이미지로 (알파인 기반으로하는 이미지 또는). 사용자를 생성하려면 어떤 지침을 추가해야합니까?
결국이 사용자를 사용하여 루트 사용자가 수행하지 않도록 컨테이너에 배치 할 애플리케이션을 실행할 것입니다.
답변
알파인 명령을 사용 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)
답변
명령은 adduser
및 addgroup
입니다.
다음은 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
이러한 애플리케이션에 대한 사용법 설명 에는 adduser 및 addgroup 에 대한 코드에 있는 긴 플래그 가 없습니다 .
다음 긴 형식의 플래그는 알파인 및 데비안 파생 모두에서 작동합니다.
사용자 추가
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에서 찾을 수 있습니다.
의도는 ENTRYPOINT
Docker가 관련 바인드 마운트에서 UID 및 GID를 유추 하도록 하는 첫 번째 인수로 해당 스크립트를 앞에 추가하는 것 입니다.
권한을 유추해야하는 위치를 결정하려면 환경 변수 “TEMPLATE”가 필요할 수 있습니다.
(작성 당시에는 스크립트에 대한 문서가 없습니다. 아직 할 일 목록에 있습니다 !!)