0
1

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 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

ボリュームを使う時のマウント先パーミッションを非rootにしたいんだが…

Posted at

はじめに

 ボリュームを使用する際、マウント先のフォルダがrootユーザーで作成されてしまって困りました。知識不足のため、なかなか解消できませんでした。メモとして残しておきます。

状況の確認

docker-compose.yml
version: '3.7'

services:
  web-back:
    build:
      context: ./backend/web-back
      args:
        - UID=${UID:-1000}
        - GID=${GID:-1000}
        - USERNAME=user
        - GROUPNAME=user
    volumes:
      - ./backend/web-back:/code
      - static_volume:/code/staticfiles

volumes:
  static_volume:
Dockerfile
FROM python:3.11

WORKDIR /code

ARG UID
ARG GID
ARG USERNAME
ARG GROUPNAME
RUN groupadd -g ${GID} ${GROUPNAME} -f && \
    useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}

USER ${USERNAME}

 
 ボリュームとしてstatic_volumeを設定し、code/staticfilesにマウントします。./backend/web-backは空のディレクトリです。rootユーザー回避のため、userという一般ユーザーとして実行できるようにしています。

 ここからコンテナを立ち上げると、指定したディレクトリが存在していないのでstaticfilesディレクトリが作られますが、パーミッションがrootになってしまいます。他のパーミッションと食い違ってしまい問題の元になるので、userに揃えていきます。

先にディレクトリ作っておけばいい!

 結論から言うと、statifilesを事前に一般ユーザーで作っておけば、この問題を回避できます。Dockerfileに以下のように追記します。

Dockerfile
FROM python:3.11

WORKDIR /code

ARG UID
ARG GID
ARG USERNAME
ARG GROUPNAME
RUN groupadd -g ${GID} ${GROUPNAME} -f && \
    useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}
RUN mkdir staticfiles && \ #追記
    chown ${USERNAME}:${GROUPNAME} staticfiles #追記

USER ${USERNAME}

 
 staticfilesを作ったあと、chownでパーミッションを変更することで、非root権限を付与できます。作られたディレクトリをマウントすることになるので、そのパーミッションは保持されたままになるということですね。

おわりに

 先にディレクトリ作っておけばパーミッションいじっておけばええんや!というのを見て、「え、それでいいの?」って感じになりました。言われればたったそれだけって感じですが、自分じゃ気づかないなぁ…。

参考

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?