久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

解決Docker for Windows無法共享磁盤的問題

 黃金屋1 2019-06-14

Docker for Windows 簡化了windows下使用docker的流程,,而且其有一項(xiàng)非常好的功能就是共享本地磁盤給docker(docker mount),但在實(shí)際使用中發(fā)現(xiàn)無法共享磁盤給docker,,報(bào)錯為:

A firewall is blocking file Sharing between Windows and the containers...

0x01 錯因分析

錯誤提示很明確,,因?yàn)榉阑饓Φ膯栴}導(dǎo)致無法正常共享磁盤。這里要提一下,,Docker for Windows本質(zhì)也是通過一個運(yùn)行在hyper-v上Linux虛擬機(jī)來實(shí)現(xiàn)的,,而其共享磁盤的方案也是通過samba來,,也就是說,Windows作為samba服務(wù)器,,然后運(yùn)行docker的虛擬機(jī)通過smbclient訪問Windows的samba服務(wù),。samba服務(wù)使用的是445端口,也就是說,,docker虛擬機(jī)無法訪問主機(jī)的445端口,。可以通過下面的命令來驗(yàn)證:

docker run --rm -it --net=host alpine /bin/sh
nc -vz 10.0.75.1 445
run.png

上圖中10.0.75.1為docker網(wǎng)絡(luò)設(shè)置的網(wǎng)關(guān),,可以看到,,如果端口無法訪問,會在等待一段時(shí)間超時(shí)后報(bào)錯,。

那為什么防火墻會攔截samba服務(wù)了,。首先我們要先分析一下防火墻的規(guī)則了。打開控制面板,,依次選擇“系統(tǒng)和安全”->“Windows Defender 防火墻”,,然后打開左側(cè)“高級設(shè)置”中的“入站規(guī)則”

firewall.png

可以看到入站規(guī)則中有很多“阻止的規(guī)則”,但是也有一條明確放通10.0.75.1445端口的訪問,,可為什么還是不行呢,?

通過Google,發(fā)現(xiàn)Windows的防火墻規(guī)則并不是按照規(guī)則先后順序執(zhí)行的,,而是“阻止規(guī)則”優(yōu)先級大于“放通規(guī)則”,參見:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc755191(v=ws.10),。

0x02 解決方法

那如何處理呢,?當(dāng)然可以通過關(guān)閉防火墻來直接驗(yàn)證。但是這只是一種臨時(shí)的驗(yàn)證方式,,因?yàn)殛P(guān)閉防火墻很不安全而且公司本身也不允許,。

分析一下阻止規(guī)格,并不是所有源IP都被禁止了訪問445端口,,這就給我們提供了一個解決方式,,找一個沒有被禁止訪問445端口IP端作為Docker for Windows的subnet address

首先打開cmd,,使用下面命令將所有入站的規(guī)則導(dǎo)出到文件中:

netsh advfirewall firewall show rule name=all dir=in type=dynamic status=enabled > d:/firewall_rules.txt

然后將所有操作阻止,,協(xié)議TCP的規(guī)則中的遠(yuǎn)程IP全部復(fù)制出來。然后上python處理,,這里使用了IPy庫進(jìn)行網(wǎng)關(guān)的判斷和處理,。

from IPy import IP
# netsh advfirewall firewall show rule name=all dir=in type=dynamic status=enabled > d:/firewall_rules.txt
firewall_rules = """
169.254.2.0/24
10.3.128.0/17
9.19.161.0/26,9.19.161.64/26,10.3.224.0/19
"""
net_sets = []
for line in firewall_rules.strip().split('\n'):
    line = line.strip()
    line_seg = line.split(',')
    for net_string in line_seg:
        print(net_string)
        net_sets.append(IP(str(net_string)))
        
for net in net_sets:
    for l2 in range(0, 255):
        for l3 in range(0, 255):
            ip_net = "10.%s.%s.0" % (l2, l3)
            if ip_net in net:
                continue
            print("Net %s is available" % ip_net)

然后從打印出的網(wǎng)段中找一個更新到Docker網(wǎng)絡(luò)中,然后就可以愉快的共享磁盤了,。

Image.png

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多