![docker에서 "chattr: 파일에 플래그를 설정하는 동안 작업이 허용되지 않습니다"](https://linux55.com/image/154730/docker%EC%97%90%EC%84%9C%20%22chattr%3A%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%ED%94%8C%EB%9E%98%EA%B7%B8%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EB%8F%99%EC%95%88%20%EC%9E%91%EC%97%85%EC%9D%B4%20%ED%97%88%EC%9A%A9%EB%90%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4%22.png)
SSH를 통해 로컬 Centos 7 Docker 컨테이너*에 연결했으며 실행하려고 합니다.
sudo chattr +i file1
하지만 오류가 발생합니다.
chattr: Operation not permitted while setting flags on file1
여기서 무슨 일이 일어나고 있는 걸까요? 무슨 표시를 말하는 걸까요? 해결책이 있나요?
+i
로 변경하면 +a
해당 오류로 인해 명령이 실패하지만 로 변경하면 +d
명령이 성공합니다. docker 컨테이너에 ssh를 연결하지 않은 경우에도 명령이 성공합니다.
*저는 Windows 10 기반의 Ubuntu VirtualBox VM 호스트에서 Centos 7 Docker 컨테이너를 실행하고 있습니다(최대한 Windows를 다루는 것을 피하고 싶습니다). 이 모든 것의 최종 목표는 이러한 컨테이너를 사용하여 일부 Ansible 스크립트를 테스트하는 것입니다.
답변1
이는 docker에서 기본적으로 비활성화되어 있는 chattr
require 기능과 관련이 있습니다 . 활성화하려면 Docker 컨테이너 시작 옵션에 CAP_LINUX_IMMUTABLE
추가하기만 하면 됩니다 .--cap-add LINUX_IMMUTABLE
예는 다음과 같습니다.
user@test:~$ docker run --cap-add LINUX_IMMUTABLE -it bash
bash-5.0# cd home
bash-5.0# touch test
bash-5.0# apk add e2fsprogs-extra
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/6) Installing libuuid (2.33-r0)
(2/6) Installing libblkid (2.33-r0)
(3/6) Installing libcom_err (1.44.5-r0)
(4/6) Installing e2fsprogs-libs (1.44.5-r0)
(5/6) Installing e2fsprogs (1.44.5-r0)
(6/6) Installing e2fsprogs-extra (1.44.5-r0)
Executing busybox-1.29.3-r10.trigger
OK: 15 MiB in 24 packages
bash-5.0# chattr +i test
bash-5.0# echo $?
0
여기docker에서 Linux 기능에 대해 자세히 알아볼 수 있습니다.