sudo docker run
コマンドを実行してコンテナ内で作られるファイルを、-v
オプションを利用して、ホスト側のディレクトリに書き出している場合、その所有者はrootユーザとなるようです。
毎回chown
コマンドを使って、所有者を書き換えるのも手ですが、コンテナの実行をrootではなく、実行中のユーザにする方法があるようなので、それを試して見ました。
環境
ubuntu 16.04
-u
オプションとid
コマンドとバッククォートを組み合わせる
以下のようなコマンドを実行すると
sudo docker run -u `id -u`:`id -g`
結果的には以下のようなコマンドを実行したものとして、処理されます。(1000
という文字は、ご利用の環境によって違うものとなる可能性もあります。)
sudo docker run -u 1000:1000
この1000
という文字はid -u
というコマンドの出力結果となっています。
試しにターミナルで以下のコマンドを実行してみてください。
id -u
「1000」などの出力結果が得られると思います。この出力された「1000」という文字が、上記のコマンドの一部として利用されている、という仕組みです。
-u
オプションを利用すると、コンテナを実行するユーザを指定できます。今回の例では上記コマンドの出力で得られた1000
が-u
オプションに渡され、結果的に実行ユーザと同じユーザのファイルが-v
オプションで指定したホスト側ディレクトリに作成されます。
拝見した情報源
ulrichschreiner/sphinx (Docker Hub)
使用方法に記述されていた-u
オプションが今回の記事のきっかけとなりました。
alias sphinx="docker run -u `id -u`:`id -g` -it --rm -v `pwd`:/doc ulrichschreiner/sphinx"
Docker run リファレンス
-u
コマンドの説明が書かれています。
-u="", --user="": ユーザ名または UID を指定する命令。オプションでグループ名や GUID を指定
-u
と書く代わりに--user
と書いても動作するようですね。
sudo docker run --user `id -u`:`id -g`
Linuxコマンド集 - 【 id 】 ユーザーIDやグループIDを表示する:ITpro
id
コマンドについて解説されています。今回は現在のユーザの情報を利用しました。
指定したユーザーIDやグループのIDを表示する。何も指定しないと現在のユーザーの情報が表示される。
日時をファイル名に付けるには
バッククォートで囲まれた部分が、コマンドの実行結果に置き換わることが、この記事から解釈できます。
バッククオートを使用すると、コマンドの出力を文字列として扱うことができる。