Docker内部でbundle exec rails g ...
などとすると、常にroot権限でファイルが作成されるため、困っていた。
この問題が起きるのはLinuxだけかもしれない。
解決策その1 Dockerfileに記述
DockerfileでDockerを実行するユーザーとグループを指定できる。
ドキュメントにはUSER postgres
という記述しか無いが、グループも指定できる。
USER 1000:1000
ただこの方法だと決め打ちになってしまうので、次の方法の方が良い。
解決策その2 コマンドの引数で指定
docker run -u 1000:1000 debian bash
この方法であれば、環境変数で指定できる。
解決策その3 docker-compose.ymlで指定
これを探していた。
原理は一緒なので、下記でOK
web:
image: debian
user: "${UID}:${GID}"
UID=${UID} GID=${GID} docker-compose up
または、UIDのところで怒られるけど
export UID=${UID}
export GID=${GID}
docker-compose up
でも良い。
シェル変数を環境変数として外に出すってことなのかな?
動作環境
Arch Linux
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.7.3
Git commit: 6b644ec
Built: Thu Oct 27 19:42:59 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.7.3
Git commit: 6b644ec
Built: Thu Oct 27 19:42:59 2016
OS/Arch: linux/amd64
関係ないですが、Arch Linux良いですね。
Dockerさえあれば、母艦のOSが何でも良い世界が最高です。