0
3

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.

Portable Docker環境でWebDAVを使う

Last updated at Posted at 2020-08-16

概要

WebDAVを使って、WindowsのエクスプローラーからUSBメモリ内のLinuxのファイルにアクセスする環境を作ります。

なぜWebDAV

Windowsのエクスプローラーで仮想化PCのLinuxのファイルにアクセスしたいときは仮想PC独自の共有フォルダ設定かsambaを使うのが一般的だと思うのですが、Qemuにはフォルダ共有機能が(実質)なく(Linux側でsamba実行するだけっぽい)、設定が凄まじく面倒そうだったのと古いsambaは設定しないとWindows10からアクセスできないのでWebDAVにしてみた。

ftpdは立てるのは簡単だけど(管理者権限なしで)ドライブに割り当てるのは無理そう。これが簡単にできるのならftpのほうがいいんだけど…。

Dockerコンテナ

おそらく需要の関係で公式のコンテナは存在しないようなので、基本的には公式のApache使用httpdコンテナをベースにデフォルト無効のWebDAVを有効にして各種設定を行うDockerfileを作るのがセオリーのようです。

それは面倒なのでbytemark/webdavを使います。2020年8月現在、一番使われているWebDAVコンテナで、必要な項目を環境変数で設定できるように工夫しているようです。

自分でDockerfileを作る場合はこの記事が参考になりそうです。

composeファイル

USBメモリ内のLinuxにサーバーを立てる想定なのでセキュリティガン無視の方向で。

ANONYMOUS_METHODS: ALLですべてのメソッドで認証なし匿名アクセスができるようになります。それでも認証方式をDigestに、かつ適当にでもユーザー名とパスワードを設定しておかないとWindowsからアクセスしてもエラーになるようです。

volumeで[任意のディレクトリ]:/var/lib/dav/dataと設定すると[任意のディレクトリ]がWebDAVでアクセスしたときのルートフォルダになります。

webdav:
  image: bytemark/webdav
  container_name: webdav
  restart: always
  ports:
    - "80:80"
  environment:
    AUTH_TYPE: Digest
    USERNAME: user
    PASSWORD: abcdefgh
    ANONYMOUS_METHODS: ALL
  volumes:
    - /root:/var/lib/dav/data

これをLinuxのどこかのディレクトリにおいてdocker-compose up -d .するとWebDAVサーバーが起動します。

composeファイルを使わない場合は、

docker run -d -p 80:80 --name webdav --restart=always -e AUTH_TYPE=Digest -e USERNAME=user -e PASSWORD=abcdefg -e ANONYMOUS_METHODS=ALL -v /root:/var/lib/dav/data bytemark/webdav

Windowsからアクセスする

設定に問題なければエクスプローラーのアドレスバーに

\\localhost@80\DavWWWRoot

とするとLinux側のファイルやフォルダが表示されるはずです。

ドライブに割り当てる

SUBSTを使えば管理者権限なしでWebDAVフォルダーを任意のドライブレターに割り当てることができます。

上記のUNCパスではうまくいかないソフトウェアでもドライブレターを割り当てればうまくいくことがあります。
実際、VisualStudioCodeではUNCパスでフォルダを開こうとしても通りません(全く関係ないフォルダを開きます)が、ドライブレターを割り当てればうまくいきます。

エクスプローラーで一度開いている場合はsubstだけでドライブ割り当てできますが、初めて開く場合は一度net useコマンドを使って接続しておく必要があります。net useでドライブを割り当てることもできますが管理者権限が必要です。

net use \\localhost@80\DavWWWRoot
subst Z: \\localhost@80\DavWWWRoot

タイトルバーには切断されたネットワーク ドライブと表示されますが、接続されているようです。

batに記述する場合はwebdavサーバーの起動に時間がかかっているとnet useに失敗するので、成功するまで数十秒~1分間隔で再接続するようにしておいたほうがいいと思います。

:NETUSE
timeout 30 /nobreak
net use \\localhost@80\DavWWWRoot
if %ERRORLEVEL% NEQ 0 goto NETUSE
subst Z: \\localhost@80\DavWWWRoot
0
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?