오류가 발생할 때 로그와 유사한 파일을 생성하는 Docker 이미지가 있습니다. 바인드 마운트를 사용하여 호스트에 쓰는 디렉토리를 마운트했습니다. 그런데 생성 된 파일은 root
.chown
chgrp
컨테이너가 파일의 소유자 및 그룹을 컨테이너를 실행하는 사용자의 소유자 및 그룹으로 설정하도록 하는 방법이 있습니까?
어떤 맥락에서 제가 만든 장난감 예제는 다음과 같습니다.
도커파일
FROM debian
WORKDIR /root
VOLUME /root/output
COPY run.sh /root/
ENTRYPOINT ["./run.sh"]
실행 sh
#!/bin/bash
echo hello > output/dump
내 실행 명령은
docker run -v $PWD/output:/root/output test
답변1
이러한 파일은 컨테이너 내부에서 실행되는 사용자에 의해 생성됩니다. 컨테이너화 명령이 실행되면 root
모든 파일이 루트로 생성됩니다.
다른 사용자로 파일을 생성하려면 해당 다른 사용자로 컨테이너를 실행하세요. 예를 들어
docker run -v "$(pwd)/output":/root/output -u $(whoami) test
참고: 컨테이너에 따라 이 기능이 기본적으로 작동하지 않을 수 있습니다(예: 컨테이너 내부에서 권한 있는 포트를 열어야 하거나 스크립트가 특정 (수퍼)유저만 액세스할 수 있기 때문입니다).
답변2
이것은오래된 알려진 오류. 해결 방법으로 사용할 수 있습니다보드맨, Docker와 호환되며 추가를 제안하기도 했습니다 alias docker=podman
. 여기서 질문의 한 가지 장점은 Podman에 루트로 실행되는 서비스가 필요하지 않다는 것입니다. 보안에 좋을 뿐만 아니라, 실제로 이런 실수를 예방해줍니다.
데모:
$ ls -l /tmp/hello
ls: cannot access 'hello': No such file or directory
$ podman run --rm -v /tmp/:/mnt/ -it ubuntu:22.04 sh -c "touch /mnt/hello && ls -l /mnt/hello"
-rw-r--r--. 1 root root 0 Sep 26 03:57 /mnt/hello
$ ls -l /tmp/hello
-rw-r--r--. 1 konstantin konstantin 0 сен 26 06:57 hello