– WSL2環境とは別に、純Linux環境でのDockerとWindows資源アクセスを実現する設定例
はじめに
DockerをLinux上で利用する際、通常はLinuxのローカルディレクトリをボリュームとしてコンテナにマウントします。しかし業務環境によっては「Linuxサーバー上で動くDockerからWindows共有フォルダにアクセスしたい」というケースがあります。
本記事では、純Linux環境でのDockerコンテナからWindows資源をマウントする具体例を紹介します。WSL2を前提としないため、オンプレLinuxサーバーやクラウドLinux環境でも応用可能です。
前提環境
- ホストOS: Ubuntu 22.04 (任意のLinuxでも可)
- Docker: 20.x 以降
- Windows共有フォルダ:
\\192.168.1.50\shared
- Windows側でSMB共有が有効化済み(アクセス権限設定済み)
手順概要
- LinuxにWindows共有フォルダをマウントする(CIFS/SMBを使用)
- マウントしたディレクトリをDockerコンテナにボリュームとして渡す
1. CIFSクライアントのインストール
LinuxでWindows共有を扱うにはCIFSパッケージが必要です。
sudo apt update
sudo apt install cifs-utils -y
2. Windows共有フォルダのマウント
Windowsサーバーの共有フォルダをLinux上にマウントします。
一時的にマウントする場合
sudo mount -t cifs //192.168.1.50/shared /mnt/winshare \
-o username=windows_user,password=windows_pass,vers=3.0
/mnt/winshare
はLinux側のマウント先vers=3.0
はSMBのバージョン(環境に応じて変更)
永続的にマウントする場合(/etc/fstabに設定)
認証情報を別ファイルに保存します。
sudo nano /etc/samba/credentials
username=windows_user
password=windows_pass
権限を制限
sudo chmod 600 /etc/samba/credentials
/etc/fstab
に追記
//192.168.1.50/shared /mnt/winshare cifs credentials=/etc/samba/credentials,vers=3.0,iocharset=utf8 0 0
反映
sudo mount -a
3. Dockerコンテナでマウントする
LinuxでWindowsフォルダが /mnt/winshare
にマウントできたら、Dockerコンテナに渡します。
例:Ubuntuコンテナでマウント
docker run -it --rm \
-v /mnt/winshare:/data \
ubuntu:22.04 bash
これでコンテナ内の /data
にWindows共有フォルダが見えるようになります。
例:NGINXコンテナでWindowsフォルダを公開
docker run -d --name web \
-v /mnt/winshare:/usr/share/nginx/html:ro \
-p 8080:80 \
nginx
ブラウザで http://<LinuxサーバーIP>:8080
にアクセスすると、Windows共有フォルダの内容がWeb公開されます。
4. トラブルシューティング
- 接続できない場合
- Windows側のSMBバージョンを確認(SMB 1.0 が無効化されている場合は
vers=3.0
を利用) - ファイアウォールでTCP 445番ポートが開放されているか確認
- Windows側のSMBバージョンを確認(SMB 1.0 が無効化されている場合は
- 認証失敗する場合
- ドメイン環境では
username=DOMAIN\\user
の形式で指定 /etc/samba/credentials
の改行やスペースを再確認
- ドメイン環境では
まとめ
本記事では、純Linux環境でDockerコンテナからWindowsの共有フォルダをマウントする方法を紹介しました。
手順を整理すると
- LinuxでWindows共有フォルダをCIFSでマウント
- Dockerの
-v
オプションでボリュームとして渡す
これにより、Windowsの社内ファイルサーバーやNAS上のデータを、Linux上のDockerアプリケーションから直接利用できます。