Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

도커 컨테이너 어플리케이션을 호스트 머신의 유저로 실행하기 #1

Open
iamminji opened this issue Mar 3, 2022 · 0 comments
Labels
docker 도커 trouble shooting 트러블 슈팅

Comments

@iamminji
Copy link
Owner

iamminji commented Mar 3, 2022

목적

도커 컨테이너 어플리케이션을 호스트 머신의 유저로 실행하기

도커는 별다른 설정 없을 시 컨테이너를 호스트의 root로 실행한다. 사용자 애플리케이션을 실행시켜야 하는데 root를 쓰는 편이 더 편했기 때문이다. (패키지 설치가 쉽고, 리소스 제약이 없기 때문임)

이유

도커 컨테이너의 스프링 부트에서 로그를 호스트 머신의 디렉토리에 남기고 싶었다.

디렉토리 마운트

디렉토리를 rw 로 마운트 하였지만, (어플리케이션 로그는 작성이 되고) 톰캣 access log 는 Permission denied 가 떴다. 디렉토리의 권한을 변경하면 해결되는 문제였지만, 777 은 뭔가 꺼려졌다.

priviledged

보안상 사용을 지양하고 있다.

그리고 호스트 머신의 유저와 어플리케이션 유저가 늘 같다는 전제가 있었다.

호스트 머신의 유저로 실행하기

리서치 한 방법으로는 2가지 방법이 있다.

  1. 도커 이미지 실행 시 호스트의 유저 정보로 실행하기
  2. 도커 이미지 빌드 시 호스트의 유저 정보와 동일하게 추가하고 어플리케이션을 실행하기

도커 이미지 실행 시 호스트의 유저 정보로 실행하기

도커 실행 명령 시 호스트 머신의 id 값을 넘기는 것이다.

UID=$(id -u)
GID=$(id -g)
docker run -it -d --user ${UID}:${GID} <IMAGE NAME>

실행 할 때 bashUID, GID 가 이미 설정 되어 있다면 warn 로그가 뜰 수도 있다.

도커 이미지 빌드 시 호스트의 유저 정보와 동일하게 추가하여 사용하기

호스트 머신의 유저 정보를 이미 알고 있다고 가정 하에 해당 UIDGID 로 동일하게 유저 정보 추가해서 사용하는 것이다. (adduser 옵션 확인)

RUN addgroup -g <GID> -S <USER> && adduser -u <UID> -D <USER> -G <USER> -H
USER <USER>

기타

도커는 기본적으로 호스트의 user namespace 를 쓴다. (도커가 호스트의 user filesystem 접근이 가능함 이 때문에 보안이슈가 있다.)

참고

@iamminji iamminji added docker 도커 trouble shooting 트러블 슈팅 labels Mar 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docker 도커 trouble shooting 트러블 슈팅
Projects
None yet
Development

No branches or pull requests

1 participant