[Docker][debug] Docker container内でgdbを実行する方法

AIX、UNIX、LinuxContainer
Screenshot-2018-4-28 Docker上でgdbを動かす - 速さこそ正義

はじめに

最近、色々と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 ドキュメント
この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました