H2Oをdocker上で80/443で動作させたい場合、起動後setuidによりh2o.confのuserとして動くため、Dockerfile中ではrootとしてH2Oを起動する 背景 http serverはnon rootで動かしたい。 そして複数のIPアドレスを持つ(IPv4 dhcp,autoip,IPv6など)ため、IPアドレスを指定せずに任意のアドレスINADDR_ANY(0.0.0.0)で待ち受けたい。 しかしport:80などの1024未満のポート番号は、CAP_NET_BIND_SERVICE権限を持つプロセスのみがbindできるとなっているため、権限がないとエラー(EACCES)になってしまう。 マニュアル nginx nginxはプロセス分離といった対策を取っている。rootで起動、port:80をbind,その後forkし、一般ユーザーで動く