私はローカルのCentos 7 dockerコンテナ*にsshで接続し、実行しようとしています。
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
います。これを有効にするには、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 機能の詳細については、こちらをご覧ください。