結論
とりあえずこの記事を見ればよいです。
以下は、上記の記事を実際にやってみて思ったことを書きます。
方法としては「うまくいく方法1 : ENTRYPOINTでuseraddでユーザーを作る」が良さそう
もちろんケース・バイ・ケースではありますが、上記記事の「うまくいく方法1 : ENTRYPOINTでuseraddでユーザーを作る」が自分にとってはしっくり来ました。
この方法の欠点らしきところは、
です。
gosu は apt
でインストールすると時間がかかるので、直接 バイナリ を落としたほうが早いです。
最大の注意点
「ボリューム所有者が root になってしまう問題」に対処するにあたっての最大の注意点は、「ホスト側およびコンテナ側の両方のディレクトリともに同じ所有者であることが期待する挙動の上で必要がある」ことです*4。
この点において具体的にハマるケースは「ローカル側のボリュームのディレクトリは予め当該ユーザで作成しておく必要があるのに、していない」ケースです。自分はこれにハマって 6時間 ぐらい溶かしました……。
具体的には例えば -v /tmp/hoge:/app/hoge
という形でボリュームを作る場合、「ホスト側の /tmp/hoge
は予めユーザによって作成されてなければいけない」ということです。存在しない場合には docker run
時に自動的に作成され、その所有者が root になってしまいます。
コンテナ側については自動作成時のカレントユーザが所有者になります。
参考までにの公式ドキュメント
ヒント: はじめて利用する方は--mountを利用してください。 上級ユーザーは-vや--volumeを用いることに慣れているかもしれませんが、--mountを利用するように心がけてください。 --mountの方が簡単に利用することができるとの調査もあります。