루트가 아닌 다른 사용자로 도커 컨테이너에 연결
실행할 때 기본적으로
docker run -it [myimage]
OR
docker attach [mycontainer]
당신은 root 사용자로 터미널에 연결하지만 저는 다른 사용자로 연결하고 싶습니다.이것이 가능합니까?
위해서docker run
:
옵션을 추가하기만 하면 됩니다.--user <user>
도커 컨테이너를 시작할 때 다른 사용자로 변경합니다.
docker run -it --user nobody busybox
위해서docker attach
또는docker exec
:
명령어는 기존 프로세스에 연결/실행하는 데 사용되므로 현재 사용자를 직접 사용합니다.
docker run -it busybox # CTRL-P/Q to quit
docker attach <container id> # then you have root user
/ # id
uid=0(root) gid=0(root) groups=10(wheel)
docker run -it --user nobody busybox # CTRL-P/Q to quit
docker attach <container id>
/ $ id
uid=99(nobody) gid=99(nogroup)
원하는 사용자에게 정말로 첨부하고 싶다면,
- 해당 사용자로 시작
run --user <user>
아니면 당신의 것에 그것을 언급하세요.Dockerfile
사용.USER
- 'su'를 사용하여 사용자 변경
실행 중인 도커 컨테이너에서 다음과 같은 명령을 사용하여 셸을 실행할 수 있습니다.
docker exec -it --user root <container id> /bin/bash
2020년부터 업데이트된 답변입니다.--user
,-u
옵션은Username or UID (format: <name|uid>[:<group|gid>])
.
그러면 저한테는 이렇게 먹히겠죠.
docker exec -it -u root:root container /bin/bash
참조: https://docs.docker.com/engine/reference/commandline/exec/
지정할 수 있습니다.USER
도커 파일에 있습니다.이후의 모든 작업은 해당 계정을 사용하여 수행됩니다.지정할 수 있습니다.USER
한 줄 앞에CMD
또는ENTRYPOINT
컨테이너를 시작할 때만 해당 사용자를 사용하려는 경우(이미지를 빌드할 때는 사용하지 않음).결과 이미지에서 컨테이너를 시작하면 지정된 사용자로 첨부됩니다.
제가 할 수 있는 유일한 방법은 다음과 같습니다.
docker run -it -e USER=$USER -v /etc/passwd:/etc/passwd -v `pwd`:/siem mono bash
su - magnus
따라서 $USER 환경 변수와 /etc/passwd 파일을 지정해야 합니다.이렇게 하면 /siem 폴더에 컴파일하여 루트가 아닌 파일의 소유권을 유지할 수 있습니다.
내 솔루션:
#!/bin/bash
user_cmds="$@"
GID=$(id -g $USER)
UID=$(id -u $USER)
RUN_SCRIPT=$(mktemp -p $(pwd))
(
cat << EOF
addgroup --gid $GID $USER
useradd --no-create-home --home /cmd --gid $GID --uid $UID $USER
cd /cmd
runuser -l $USER -c "${user_cmds}"
EOF
) > $RUN_SCRIPT
trap "rm -rf $RUN_SCRIPT" EXIT
docker run -v $(pwd):/cmd --rm my-docker-image "bash /cmd/$(basename ${RUN_SCRIPT})"
이를 통해 사용자는 에서 제공하는 도구를 사용하여 임의 명령을 실행할 수 있습니다.my-docker-image
사용자의 현재 작업 디렉토리가 볼륨에 마운트되는 방법을 기록합니다./cmd
용기 안에.
나는 이 워크플로우를 사용하여 개발 팀이 bsp를 유지하는 arm64 대상에 대한 C/C++ 코드를 교차 컴파일할 수 있도록 합니다.my-docker-image
에는 크로스오버, sysroot, make, cmake 등이 포함됩니다.이를 통해 사용자는 다음과 같은 작업을 수행할 수 있습니다.
cd /path/to/target_software
cross_compile.sh "mkdir build; cd build; cmake ../; make"
어디에cross_compile.sh
위에 표시된 스크립트입니다.addgroup/useradd
machine을 사용하면 빌드에 의해 생성된 모든 파일/디렉토리를 사용자가 검색할 수 있습니다.
이 일이 우리에게 효과가 있는 동안.좀 촌스러워 보여요.저는 다른 구현 방법을 선택할 수 있습니다.
위해서docker-compose
.에서docker-compose.yml
:
version: '3'
services:
app:
image: ...
user: ${UID:-0}
...
인.env
:
UID=1000
www-data 사용자로 명령 실행:docker exec -t --user www-data container bash -c "ls -la"
이를 통해 "WSL2로 Docker Desktop을 실행하는 Windows의 nodejs 컨테이너에 웹 팩 내용을 컴파일하고 현재 로그인한 사용자 아래에 빌드된 자산을 보유하십시오."라는 제 사용 사례를 해결했습니다.
docker run -u 1000 -v "$PWD":/build -w /build node:10.23 /bin/sh -c 'npm install && npm run build'
고유 필드별 답변을 기준으로 합니다.감사해요!
또한 이 자료는 제가 무슨 일이 일어나고 있는지 이해하는 데 도움이 되었습니다.
언급URL : https://stackoverflow.com/questions/35734474/connect-to-docker-container-as-user-other-than-root
'programing' 카테고리의 다른 글
spring-boot-maven-plugin과 maven-compiler-plugin의 차이점은 무엇입니까? (0) | 2023.08.29 |
---|---|
HTML 테이블의 맨 위 행만 고정(고정 테이블 머리글 스크롤) (0) | 2023.08.29 |
git: 메시지를 입력하는 도중 커밋 (0) | 2023.08.29 |
리피터의 링크 버튼에 대한 비동기 포스트백 트리거를 수행하는 방법 (0) | 2023.08.29 |
파이썬에서 목록을 공백이 있는 문자열로 변환하려면 어떻게 해야 합니까? (0) | 2023.08.24 |