在 win10 上使用 docker-machine 創(chuàng)建主機(jī)使用 hyperv 驅(qū)動(dòng).
準(zhǔn)備工作
官方提示: 注意窃判,必須事先在 Hyper-V 管理器中新建一個(gè) 外部虛擬交換機(jī) 執(zhí)行下面的命令時(shí)倦踢,使用 --hyperv-virtual-switch=MY_SWITCH 指定虛擬交換機(jī)名稱
看起來(lái)好麻煩, 但是又能怎么辦呢? ⊙﹏⊙
點(diǎn)擊 win 窗口圖標(biāo), 在 windows 管理工具下選擇 Hyper-V 管理器, 然后在右側(cè)操作欄選擇虛擬交換機(jī)管理器, 諾, 像這樣:
然后在彈出的新窗口中點(diǎn)擊新建虛擬機(jī)網(wǎng)絡(luò)交換機(jī), 選擇外部, 點(diǎn)擊創(chuàng)建虛擬交換機(jī)
為新的虛擬交換機(jī)取一個(gè)好聽(tīng)的名字, 然后選擇外部網(wǎng)絡(luò), 選擇相應(yīng)的網(wǎng)卡, 然后點(diǎn)擊確定, 這時(shí)我們的外部虛擬交換機(jī)就準(zhǔn)備好了, 這是創(chuàng)建 docker 主機(jī)的準(zhǔn)備工作
創(chuàng)建主機(jī)
好了, 準(zhǔn)備工作完畢, 下面就可以創(chuàng)建主機(jī)了, 在命令行中行云流水的敲出這行代碼:
docker-machine create --driver hyperv --hyperv-virtual-switch=docker manager
這里需要在管理員權(quán)限下運(yùn)行命令行
命令跑起來(lái)了, 一切都很完美
Creating CA: D:\docker\certs\ca.pem
Creating client certificate: D:\docker\certs\cert.pem
Running pre-create checks...
Creating machine...
(manager) Copying D:\docker\cache\boot2docker.iso to D:\docker\machines\manager\boot2docker.iso...
(manager) Creating SSH key...
(manager) Creating VM...
(manager) Using switch "docker"
(manager) Creating VHD
(manager) Starting VM...
(manager) Waiting for host to start...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
好的, 繼續(xù)等待...
等待...
...
...
如果你跟我一樣幸運(yùn)的話, 你會(huì)發(fā)現(xiàn), 等了半天, 命令行還是非常優(yōu)雅的卡在了:
Waiting for SSH to be available...
怎么回事, 我是個(gè)急性子啊, 這樣下去, 是要我等到天荒地老嗎?
可能你和我一樣已經(jīng)按捺不住了...
再讓我等可能會(huì)忍不住砸鍵盤了
好吧, 不能再等了, 是時(shí)候行動(dòng)起來(lái)了:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager - hyperv Running tcp://192.168.43.196:2376 Unknown Unable to query docker version: Get https://192.168.43.196:2376/v1.15/version: x509: certificate signed by unknown authority
額...怎么出現(xiàn)了errors, 這是什么鬼
那我試試 ssh 連接這個(gè)主機(jī)吧:
docker-machine ssh manager
進(jìn)不去?
咋辦? 完全不知道怎么回事啊, 好吧, 只有祭出神器了: 百度, google ...
得到一行調(diào)試命令:
ssh -vvv -F /dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none docker@192.168.43.157 -o IdentitiesOnly=yes -i D:\docker\machines\manager\id_rsa -p 22
這里需要修改成你對(duì)應(yīng)的 docker 主機(jī)的 IP 以及私鑰地址
一大堆 debug 信息輸出了出來(lái), 還是連接不到 docker 主機(jī) , 不過(guò)這里我們得到了關(guān)鍵信息
debug3: Bad permissions. Try removing permissions for user: S-1-5-11 on file D:\\docker\\machines\\manager\\id_rsa.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'D:\\docker\\machines\\manager\\id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
這個(gè)好像是私鑰的權(quán)限問(wèn)題造成的, 提示我們?nèi)バ薷乃借€權(quán)限, 好吧.
找到主機(jī)目錄, 這里我的主機(jī)目錄是
D:\docker\machines\manager
這里有一個(gè) id_rsa 文件, 在文件上單擊右鍵, 選擇屬性, 打開(kāi)彈窗后, 選擇安全
在這里我嘗試了很多次, 當(dāng)然, 也失敗了很多次, 每次要么就是報(bào) bad permissions 錯(cuò)誤, 就是報(bào) bad owner 錯(cuò)誤, 這里, 我直接給出正確的處理方式
-
首先, 點(diǎn)擊編輯, 新的彈窗中添加一個(gè)新的用戶, 給到所有權(quán)限, 點(diǎn)擊確定
我的電腦用戶是 Hans, 所以我添加了一個(gè) Hans 用戶, 然后給他所有權(quán)限
-
然后點(diǎn)擊高級(jí)按鈕, 點(diǎn)擊所有者后面的 更改 按鈕, 將所有者更改為 Hans
-
緊接著點(diǎn)擊左下角的禁用繼承, 選擇第一項(xiàng), 確定退出
-
之后再點(diǎn)擊編輯, 刪除除了 Hans 之外的其他用戶
我這里保留了一個(gè) Administrators 用戶, 把他的權(quán)限只保留了讀取, 不過(guò)好像也并不影響
接下來(lái), 在命令行中輸入
$ docker-machine restart manager
(manager) Waiting for host to stop...
(manager) Waiting for host to start...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
嘿嘿, 感覺(jué)不錯(cuò)的樣子, 到這里 docker 主機(jī)就算創(chuàng)建成功了.
如果有幫到你, 點(diǎn)個(gè)贊吧.