LoginSignup
4
2

More than 5 years have passed since last update.

sudo docker runを実行して生成するファイルの所有者やグループを実行中のユーザのものにする

Posted at

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を表示する。何も指定しないと現在のユーザーの情報が表示される。

日時をファイル名に付けるには

バッククォートで囲まれた部分が、コマンドの実行結果に置き換わることが、この記事から解釈できます。

バッククオートを使用すると、コマンドの出力を文字列として扱うことができる。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2