80
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerコンテナに一般ユーザーを追加するときのDockerfileの設定

Last updated at Posted at 2021-02-23

はじめに

Dockerfileを作るときにいつも思い出せなくてググってしまうのでメモにしました。
何番煎じかなという気もしますが...。
検索すると設定方法が複数出てくるので、ここに書いた方法でないといけないというわけではないです。

一般ユーザを追加する場合

  • まず、idコマンドでホストのユーザーIDとグループIDを確認します。

    $ id
    id=1000(hoge) gid=1000(hoge) groups=1000(hoge),....
    
  • 先程確認したユーザーIDとグループIDを使って、ユーザとグループを追加したDockerfileを作成します。例えば次のような形になります。

    FROM ubuntu:latest
    
    ARG USERNAME=user
    ARG GROUPNAME=user
    ARG UID=1000
    ARG GID=1000
    RUN groupadd -g $GID $GROUPNAME && \
        useradd -m -s /bin/bash -u $UID -g $GID $USERNAME
    USER $USERNAME
    WORKDIR /home/$USERNAME/
    
    • groupaddコマンドで新しいグループを作成します。-gオプションでグループIDを指定しています。
    • useraddコマンドで新しいユーザーを作成します。オプションの意味は次の通りです。
      • -m, --create-home ホームディレクトリを作成します。
      • -s, --shell SHELL ログインシェルを指定します。
      • -u, --uid UID ユーザーIDを指定します。
      • -g, --gid GROUP プライマリグループのグループ名かグループIDを指定します。ちなみに省略した場合、環境によって「ユーザー名と同じグループ名が新たに作成される」「/etc/default/useraddに記述されたグループID」「デフォルトの100」のいずれかになるようです。参考: ubuntu manuals

sudoを実行できるユーザーを追加する場合

  • Dockerfile のベストプラクティスを見ると、Dockerコンテナ内でsudoを使用すると問題を起こす可能性があるようです。とはいえどうしてもsudoを使いたい場合は次のようなユーザーを追加することで使用できます。

    FROM ubuntu:latest
    
    RUN apt-get update && apt-get install -y sudo
    
    ARG USERNAME=user
    ARG GROUPNAME=user
    ARG UID=1000
    ARG GID=1000
    ARG PASSWORD=user
    RUN groupadd -g $GID $GROUPNAME && \
        useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
        echo $USERNAME:$PASSWORD | chpasswd && \
        echo "$USERNAME   ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
    USER $USERNAME
    WORKDIR /home/$USERNAME/
    
    • useraddコマンドに-G sudoが追加されています。-Gはセカンダリグループを指定するオプションで、ここではユーザーがsudo権限を持つグループに所属することを示します。
    • echo $USERNAME:$USERNAME | chpasswdでパスワードを設定します。
    • echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoersでパスワードの入力なしでsudoを実行可能に設定します。

参考

80
71
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
80
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?