85225


Windows環境でDockerを使用しようとしています。

WSL2をコマンドプロンプトで動かしてdockerコマンドを実行しています。

[code]

    docker run -it -u $(id -u):$(id -g) \
      -v C:\Users\ユーザー名\Desktop\mounted_folder:/created_in_run <image_id> bash
    
[/code]

というコマンドでcreated_in_runフォルダーをコンテナの中に作り、コンテナの中で、root以外のユーザーで `touch test`
をして、created_in_runフォルダーにtestファイルを作りたいです。

ですが、Windowsの環境で、id -uが1000、id -gが1000となっており、コンテナの中で、ls
-laをしてファイルの所有ユーザーをしらべても、created_in_runフォルダーのユーザーがrootと出ます。

従いまして、コンテナの中でcreated_in_runフォルダーで `touch test` をしても、

[code]

    touch: cannot touch 'test': Permission denied
    
[/code]

という表示が出て上手くいきません。

ls -laのcreated_in_runフォルダーに関する実行結果は次の通りです。

[code]

    drwxr-xr-x 2 root root 4096 Dec 7 05:11 created_in_run
    
[/code]

色々調べたのですが、Windows環境でDockerのアクセス権限に関する問題は解決できそうにありません。

因みに、Mac環境ではcreated_in_runフォルダーのユーザーがls
-laコマンドで調べるとrootと表示されるものの、コンテナの中でcreated_in_runフォルダーにtouch testすると出来るようです。

Mac環境では、この操作をすることで、ls -laコマンドで改めて調べると、ちゃんとユーザー名が表示されるなどというような現象が起こるそうです。

この件で上手くcreated_in_runフォルダーに `touch test` を出来るようにする方法が分かる方いらっしゃいませんでしょうか？

この問題が解決する方法は無いでしょうか？

宜しくお願い致します。


CC BY-SA 4.0
2021-12-08T05:02:01.133
84019
2021-12-19T07:23:19.917
2021-12-08T06:09:28.433
3060
49404
question
docker
DockerをWindowsで使う。フォルダーをアクセス権限を付けてマウントしたい。


解決しましたので報告致します。

まず最初に、今回のようにアクセス権限を付与してWSLを用いてWindows上のフォルダをDockerでマウントしたい場合、

[code]

    docker run -it -u $(id -u):$(id -g) \
      -v \mnt\c\Users\ユーザー名\Desktop\mounted_folder:/created_in_run <image_id> bash
    
[/code]

のようにする必要があります。

そうすると、アクセス権限が上手く共有され、`touch test`出来るようになりました。

[![touch
test出来た](https://i.stack.imgur.com/0J8ZY.jpg)](https://i.stack.imgur.com/0J8ZY.jpg)

次に、マウントしたいフォルダを、

[code]

    /c/Users/'username'/desktop/mounted_folder
    
[/code]

のように指定した場合、WindowsのGUIではExplorerで次のようにパスを指定すると、閲覧できます。

[code]

    \wsl$\Ubuntu\c\Users\ 'username'\desktop\mounted_folder
    
[/code]

[![Explorerの表示結果](https://i.stack.imgur.com/E3ZR7.png)](https://i.stack.imgur.com/E3ZR7.png)

\wsl$\Ubuntu~のように記述したのは、LinuxのディストリビューションがUbuntuだったからです。

既定のディストリビューションの確認方法は、

[code]

    wsl --list -v
    
[/code]

で確認できます。  
[![wsl --list -v
の結果](https://i.stack.imgur.com/Pb9kR.jpg)](https://i.stack.imgur.com/Pb9kR.jpg)

もし、マウントしたいフォルダを、

[code]

    /mnt/c/Users/'username'/desktop/mounted_folder
    
[/code]

このように指定した場合、Explorerで確認できるフォルダへのパスは

[code]

    C:\Users\'username'\Desktop\mounted_folder
    
[/code]

となります。

こちらが本来マウントして欲しいフォルダです。

マウントしたいフォルダを、

[code]

    /c/Users/'username'/Desktop/mounted_folder
    
[/code]

のように指定した場合、コマンドラインでそのフォルダを参照したければ、Windows上のコマンドラインとしてはPowerShellを使ってください。

コマンドプロンプトだとエラーが出ます。

[![コマンドプロンプト
エラー](https://i.stack.imgur.com/hgEPy.jpg)](https://i.stack.imgur.com/hgEPy.jpg)

ちなみに、フォルダのアクセス権限を調べたところ、前者の場合と後者の場合とでは異なりました。  
[![マウントするフォルダを/c/Users/'username'/desktop/mounted_folderと指定した場合](https://i.stack.imgur.com/Bd5tD.jpg)](https://i.stack.imgur.com/Bd5tD.jpg)  
[![マウントするフォルダを/mnt/c/Users/'username'/desktop/mounted_folderとした場合](https://i.stack.imgur.com/iSzRZ.jpg)](https://i.stack.imgur.com/iSzRZ.jpg)

それでアクセス権限がコンテナと共有できなかったのかと考えられます。

ちなみに、`id -u`と`id -g`の結果はいずれも同じでした。  
[![マウントするフォルダを/c/Users/'username'/desktop/mounted_folderと指定した場合](https://i.stack.imgur.com/2DuQq.jpg)](https://i.stack.imgur.com/2DuQq.jpg)  
[![マウントするフォルダを/mnt/c/Users/'username'/desktop/mounted_folderとした場合](https://i.stack.imgur.com/3gZQM.jpg)](https://i.stack.imgur.com/3gZQM.jpg)

アクセス権限の共有が上手くいかないことについての原因は定かではありませんが、共有させて頂きます。

以上、解決として報告させて頂きます。

ご協力ありがとうございました。

宜しくお願い致します。


CC BY-SA 4.0
2021-12-19T07:23:19.917
85225
2021-12-19T07:23:19.917
49404
84019
answer