はじめに
最近、色々とDocker containerにソフトウェアをbuildすることをしています。
が、パッケージを使用せず、ソースからbuildしていると、仮想マシンやベアメタルと違い、なぜかうまくいかないことが多いです。
んでここはよく使われるgdbを使用するわけですが、そのままだと使用できないようです。
問題について
普通に使用しようとすると以下のようなメッセージが出力されます。
(gdb) r
Starting program: /usr/local/bin/stubby
warning: Error disabling address space randomization: Operation not permitted
Could not trace the inferior process.
Error: ptrace: Operation not permittedDuring startup program exited with code 127.
(gdb) quit
調べてみると
調べてみるとどうやら以下のように権限が不足しているためのようです。
Docker上でgdbを動かす – 俺より凄いやつしかいない。
Dockerのコンテナ上で動くプロセスはそのままではptraceが使えないようです。まぁptraceできちゃうと、containerホスト側にも影響があるので、権限分離している意味なくなりますからね・・・
対処方法
ということで対処としては、
POINT
セキュリティが低下する認識を持ったうえで、権限を付与してやれば良い
だそうです。
$ docker run -i -t --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" [CONTAINER_NAME] /bin/bash
--cap-add
および--security-opt
については、下記公式ドキュメントを参照してください。
Docker run リファレンス — Docker-docs-ja 24.0 ドキュメント
Docker run リファレンス — Docker-docs-ja 24.0 ドキュメント