DockerコンテナのvolumeマウントとWindwos
Windows 10 pro
Docker Version 18.03.1-ce-win65
コンテナにWindowsのフォルダをマウントさせれるが、が、が、アプリケーションの動作が時々不安定になる。ruby gemとかruby gemとか
なので、コンテナOSにsambaをインストールしてWindowsからマウントするのがよい
永続化データはイメージにvolumesを定義しておけばDockerホストOSのHyper-VのMobyLinuxVMに残るため問題ない
作業時間目安3分
目次
1 Windowsからコンテナへのルート追加
1.1 コンテナのアドレス範囲を調べる
1.2 MobyLinuxVMのアドレスを調べる
1.3 WindowsのDockerNATのインタフェース番号を調べる
1.4 Windowsにroute追加
1.5 pingが通る事を確認
2 コンテナにsambaインストール
2.1 インストール
2.2 コンテナの/etc/samba/smb.confを編集
2.3 コンテナの/et..a/smb.confのチェック
2.4 コンテナのsmbd自動起動の登録
3 確認
1 Windowsからコンテナへのルート追加
1.1 コンテナのアドレス範囲を調べる
docker exec -it コンテナ名 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02
inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0
1.2 MobyLinuxVMのアドレスを調べる
方法1 netstatでWindowsのDockerNATアドレスで絞り込めばほぼ分かる
-
ipconfig /all イーサネット アダプター vEthernet (DockerNAT): 接続固有の DNS サフィックス . . . . .: 説明. . . . . . . . . . . . . . . . .: Hyper-V Virtual Ethernet Adapter #2 IPv4 アドレス . . . . . . . . . . . .: 10.0.75.1(優先)
WindowsのDockerNATの接続している先はMobyLinuxVMしかないだろう
netstat -ano | findstr 10.0.75.1 TCP 10.0.75.1:445 10.0.75.2:39474 ESTABLISHED 4
-
方法2 arpテーブルから
1.3 WindowsのDockerNATのインタフェース番号を調べる
番号は29 16進数で0x1d
方法1 netsh
netsh interface ipv4 show interface Idx Met MTU 状態 名前 --- ---------- ---------- ------------ --------------------------- 29 15 1500 connected vEthernet (DockerNAT)
方法2 route
route print インターフェイス一覧 29...00 15 5d 00 02 08 ......Hyper-V Virtual Ethernet Adapter #2
1.4 Windowsにroute追加
管理者でpowersehllかコマンドプロンプト起動
コンテナのアドレス範囲への接続にMobyLinuxVMを通すというrouteの追加
アドレス空間とMaskは項1.1で調べた値
ゲートウェイはMobylinuxVMで項1.2で調べた値
WindowsのDockerNATのインタフェース番号は項1.3で調べた番号
ifは16進数で指定 29は16進数で0x1d
(ifはなくても適切なインタフェースが自動的に割り当てられる)
一時追加
再起動で失われる
Docker start
と共にバッチに書いて置けばいい
route add 172.18.0.0 mask 255.255.0.0 10.0.75.2 if 0x1d
永続追加
永続追加するなら-p
オプションを付ける
route -p add 172.18.0.0 mask 255.255.0.0 10.0.75.2 if 0x1d
"削除はこう
route delete 172.18.0.0 mask 255.255.0.0
正直こうでいい
route -p add 172.17.0.0 mask 255.255.0.0 10.0.75.2
route -p add 172.18.0.0 mask 255.255.0.0 10.0.75.2
1.5 pingが通る事を確認
ping コンテナIP
2 コンテナにsambaインストール
alpineはこれ
samba-alpine-docker/Dockerfile at master · pwntr/samba-alpine-docker · GitHub
2.1 インストール
-
docker exec -it コンテナ名 apt-get install samba
2.2 コンテナの/etc/samba/smb.confを編集
docker exec -it コンテナ名 vi /etc/samba/smb.conf
追加
[USERNAME]
comment = USERNAME share
path = /home/USERNAME
browsable = yes
public = yes
read only = no
writable = yes
force user = USERNAME
2.3 コンテナの/etc/samba/smb.confのチェック
docker exec -it コンテナ名 testparm
2.4 コンテナのsmbd起動
通常はデーモンのsmbd
古いものはsambaがサービス名(もうないか)
コンテナOSに合わせて起動や自動登録
docker exec -it コンテナ名 chkconfig smbd on docker exec -it コンテナ名 update-rc.d smbd defaults docker exec -it コンテナ名 update-rc.d smbd enable 1 2 3 4 5