はじめに

環境作成をしていると権限関係でエラーが生じることがたまにあります。
権限関係のエラーは解決が難しいイメージがあります。

本日は、JupyterNotebook (JupyterLab)で権限関係のエラーがでて、解決しましたのでまとめたいと思います。

環境

    • windows 10

 

    • Docker Desktop 3.3.0

 

    利用したDockerfileはこちら

問題

Dockerを利用して、JupyterNotebook (JupyterLab)の環境を作成して、アクセスしました。
そして新規ファイル(.ipynb)を作成したところ以下のようなエラーが出ました。

bandicam 2021-06-12 14-41-03-951.jpg
bandicam 2021-06-12 14-42-43-765.jpg

permission deniedとあるとおり権限が付与されていないことによるエラーです。

また、このエラーはDocker imageをdocker runして起動したときに起きるもので、docker-compose upでコンテナを起動したときには出ませんでした。

調査

まずはDockerのコンテナの中に入り、以下のコマンドを入れます。

$ ls -la

このコマンドについてはこちらを確認してください。

すると、以下のように表示されます。

bandicam 2021-06-12 14-41-34-436.jpg

今回、JupyterNotebook (JupyterLab)を利用しているディレクトリは、最後から2行目のdataというところですが、権限がrootになっています。

Jupyterを利用する場合、jovyanにする必要があります。これがエラーの原因でした。

解決方法

方法1. Dockerfileの見直し

Dockerfileで./dataというディレクトリを作成しているところを確認すると、

FROM jupyter/datascience-notebook
# Setting jupyter notebook environment.
RUN rmdir work
ARG password=not_password

# install libraries
ENV GRANT_SUDO=yes
USER root

(途中省略)

RUN mkdir ./data

# jupyter config
COPY ./settings/jupyter_notebook_config.py .jupyter/

rootユーザーでディレクトリを作成していました。
このユーザーをjovyanに変更して、dataディレクトリを作成します。

FROM jupyter/datascience-notebook
# Setting jupyter notebook environment.
RUN rmdir work
ARG password=not_password

# install libraries
ENV GRANT_SUDO=yes
USER root

(途中省略)

# ユーザー変更
ENV GRANT_SUDO=no
USER jovya
RUN mkdir ./data

# upyter config
COPY ./settings/jupyter_notebook_config.py .jupyter/

すると、無事成功しました。
このDockerfileに関してはこちらのリポジトリで確認できます。

方法2. コマンドで権限を変更する

まず、コンテナの中に入ります。

$ docker exec -it [コンテナ名] sh

そのあと、権限を変更します。

# sudo chown -R [変更するユーザー名] [変更するディレクトリorファイル]
$ sudo chown -R jovyan data

このコマンドはこちらを参考にしました。

パスワードが求められるのでいれてください。
私の場合は、Dockerfileでパスワードを設定しています。

FROM jupyter/datascience-notebook
# Setting jupyter notebook environment.
RUN rmdir work
ARG password=not_password
(省略)

パスワードはnot_passwordといれました。

password: (not_password ただし表示はされない)
bandicam 2021-06-12 15-30-42-524.jpg

userからjovyanに変更されました。

ただしこの方法ではdocker runするたびに変更が必要になるので、Dockerfileで権限変更の処理をします。

Dockerfileを以下のように変更します。

FROM jupyter/datascience-notebook
# Setting jupyter notebook environment.
RUN rmdir work
ARG password=not_password

# install libraries
ENV GRANT_SUDO=yes
USER root

(途中省略)

RUN mkdir ./data

# jupyter config
COPY ./settings/jupyter_notebook_config.py .jupyter/

# 権限変更
RUN chown -R jovyan data

これでファイルが作成できるようになりました。

bandicam 2021-06-12 15-38-26-812.jpg

おわりに

今回は権限の対処をしました。最近権限で同じようなことをしていたのでうまく対処ができました。
動かなかったらとりあえず確認してみるのは大切です。

参考記事

    • lsコマンドの使い方と覚えたい15のオプション【Linuxコマンド集】

 

    Anacondaインストール後のJupyterの設定: ブラウザとパスワードの設定・nbextensionsとその他拡張機能の追加・設定
bannerAds