Dockerで docker compose up, docker compose build, makemigrations, migrateなど行う際 Permission deniedというエラーが発生する場合があります。
単に権限がないわけではなく、複数の理由が考えられるので、一例を下記に記してみます。
1.そもそもディレクトリ or ファイルがDockerイメージ内に生成されていない
Dockerfileに対象のディレクトリやファイルを生成するコードが含まれていないかもしれません。
ビルド時にディレクトリやファイルを生成するにはDockerfileに下記のような命令を加えます。
# ディレクトリを生成
RUN mkdir 対象のディレクトリ
# ファイルを生成
RUN touch 対象のファイル
2.パスが間違っている
ディレクトリやファイルはあるが、パスが間違っている...という場合にもこのエラーが生じるようです。
例えば下記は/usr/src/appをプロジェクトディレクトリとし、直下にtestというディレクトリおよびファイルをコンテナ内に生成することを期待するコードの一部です。これらが完全一致していないとエラーになる可能性があります。
ENV APP_HOME=/usr/src/app
RUN mkdir $APP_HOME/test
services:
サービス名:
build: ./
working_dir: /usr/src/app/
volumes:
- .:/usr/src/app
3.権限がない
ディレクトリやファイルを生成されている、パスも間違っていない、けれどPermission deniedと出る場合はそのディレクトリやファイルへのアクセス権限がない可能性があります。
アクセス権限はDockerfile内で例えば下記のように定義できます。
...中略...
RUN addgroup -S myuser && \
adduser -S myuser -G myuser && \
chown -R myuser:myuser $APP_HOME
USER myuser
このコマンドはざっと説明すると1行ずつ下記の操作を行っています。
myuserという名前のグループを作り、- そこに
myuserという名前のユーザーを作成・追加し、 myuserグループおよびmyuserユーザーに$APP_HOMEディレクトリの読み書きの権限を与えるmyuserユーザーとして一連の操作を実行する
上記はユーザーに権限を与えてディレクトリやファイルを操作するアプローチですが、下記はディレクトリやファイルのアクセス権限を直接操作するアプローチです。
RUN chmod u+w $APP_HOME/test
chmodコマンドはコマンドラインで操作するLinuxコマンドと同じ文法で使います。
権限が付与できないケース
残念ながらこれらの操作を行ってもアクセス権が得られない場合があるようです。
仮想サーバー(例えばAmazon EC2インスタンス)上でDockerコンテナを実行する場合、Dockerの操作と仮想サーバーのセキュリティ設定は異なるレイヤーに位置します。
それらの仮想サーバーの設定(ネットワークアクセス設定、セキュリティグループ、ファイアウォール設定など)が、Dockerコンテナのアクセス可能性に影響を与えている場合は、Dockerからは操作できません。
その場合はサーバーの管理者に話して権限をもらう必要があります。
4.それ必要?
「そもそもそのディレクトリ・ファイルに書き込みを行う処理は本当に必要?」と考えてみるのも選択肢の一つです。
必要ないのであれば書き込みを行う処理を排除するのもありです。
5.その他
変更した設定が反映されていない可能性があります。
例えばdocker compose buildにはオプションをつけてdocker compose build --no-cacheとするとキャッシュをクリアして実行できます。
権限まわりのエラーは、原因がDocker側にあるのかホスト側にあるのかで対処が変わります。切り分けに詰まったときに聞ける相手がいる学び方という選択肢もあります。
AIプログラミングスクール「SiiD」について
AIプログラミングスクール「SiiD」は、未経験からITエンジニア転職を目指す方向けのオンラインスクールです。
SiiDの特徴
- 現役エンジニアでYouTube登録者約13万人の「セイト先生」が代表兼主任講師
- 採用側の実務知見(2,000人以上の選考・150名以上のエンジニア採用)にもとづく指導
- 生成AIを取り入れた学習設計と、実務レベルのフルスタックWeb開発スキル
- Workship CAREER(株式会社GIG)と連携した無料の転職伴走支援
- 経済産業省認定のReスキル講座で、給付金の条件を満たせば実質105,600円〜
- 学割あり(35%オフ)
こんな方におすすめ
- 未経験・文系・社会人からITエンジニア転職を本気で目指したい方
- 独学に限界を感じている方
- 費用を抑えながら実務スキルと転職サポートを両立したい方
「未経験だから」とあきらめる必要はありません。採用する側を知り尽くしたプロが、給付金で負担を抑えながら内定まで伴走します。