2017-05-19 98 views
-1

我想弄清楚如何設置開發環境來在本地開發多個apis。Docker for windows開發環境設置

我的開發環境如下:

主機:10.10.4.19 的SQL Server 2016點快速安裝在主機的10.10.4.19,1433聽,我可以在本地連接到從主機和其它PC上在網絡上。

Docker for windows穩定版本,安裝並開發netcore webapis,它獲得集裝箱化並在本地運行,我想連接到主機上的SQL Server實例。

理想情況下,每個容器在某些NAT網絡中都有一個靜態IP,但是我一直無法使用docker for windows默認NAT網絡設置獲得靜態IP。

我已經嘗試設置一個透明的網絡,但是這可能不會工作,因爲我真的不想在網絡上這些。我希望它們只能被主機訪問,或者通過主機IP通過docker run -p命令進行一些端口映射。

我有容器運行和工作(除了靜態IP地址),但我無法訪問主機。我可以ping通(我假設的是)容器中找到的網關IP地址處的主機,但我似乎無法訪問主機上運行的任何服務。

在容器內,我可以ping通網絡中的其他PC(IE 10.10.4.22)並且可以上網,但由於某種原因,我無法在10.10.4.19上ping主機。我收到請求超時。

所以我問的問題是,我如何設置一個NAT網絡與互聯網訪問的容器可以談話的主機和其他容器和主機可以談談所有的容器了。理想情況下,我可以爲每個服務設置靜態IP,我可以在主機上設置nginx或其他反向代理來幫助向每個容器發送代理請求。

我已經嘗試使用碼頭網絡創建一個單獨的NAT創建-d NAT mynat,但它告訴我該對象已存在。

我試着通過虛擬網卡上定義的10.10.4.19 ip地址和172.20.xxx.1地址訪問主機的SQL實例,但是他們都不會連接到SQL實例或任何我運行的網站/ API在主機上。然而,容器可以訪問網絡上的其他PC的網站/ apis。只是不是主機。

所以我想我問是否有可能從容器內訪問主機的服務?

很多我找到的文檔的基於Linux的,我不知道這是否可以使用相同的或不

誰能給任何方向將不勝感激。

編輯:

玩通宵與泊塢窗網之後,我能夠用我自己來替換默認泊塢窗NAT的網絡,所以我可以指定靜態IP地址。

我所做的是將"bridge: "none"添加到位於C:\ ProgramData \ Docker \ config的daemon.json文件。這使得它所以默認情況下不

然後創建默認NAT網絡我跑了管理員的PowerShell下面的命令來創建自己的NAT網絡

PS C:\WINDOWS\system32> stop-service com.docker.service 
PS C:\WINDOWS\system32> stop-service hns 
PS C:\WINDOWS\system32> del 'C:\ProgramData\Microsoft\Windows\HNS\HNS.data' 
PS C:\WINDOWS\system32> Get-ContainerNetwork | Remove-ContainerNetwork 
PS C:\WINDOWS\system32> Get-NetNat | Remove-NetNat 
PS C:\WINDOWS\system32> start-service hns 
PS C:\WINDOWS\system32> start-service com.docker.service 
PS C:\WINDOWS\system32> docker network create -d nat --subnet=192.168.1.0/24 --gateway=192.168.1.1 mynat 
d0d31ecf39ec6cada948c3158b176e9a67d7e0ba6458208d9c91b240587c0763 

我就能夠開始我用的容器以下命令

docker run -itd --net=mynat --ip=192.168.1.25 --rm <containername> 

但是:我仍然無法訪問主機上的SQL Server Express實例。我以爲我可以在192.168.1.1,1433 \ SQL2016或10.10.4.19 \ SQL2016上訪問它,但是我得到錯誤:提供程序:SQL網絡接口,錯誤:26 - 定位服務器/實例錯誤定位服務器/實例爲兩者都指定

Pinging 192.168.1.1會返回結果,但pinging 10.10.4.19返回Request超時。

我已經在虛擬網卡適配器上設置了192.168.1.1的靜態IP地址,這似乎沒有任何幫助。希望有人知道如何從容器內訪問主機。謝謝!

EDIT2:

我能打到現在在主機上運行的API。說實話,我不確定發生了什麼變化。但我現在可以在容器內的主機上運行http://192.168.1.1/api服務。

注意:端口綁定似乎無法通過容器上的靜態IP設置工作。您只能點擊dockerfile中的EXPOSE端口上的服務,並且運行帶有-p 5600:9606的docker命令不會在5600上公開,它仍然只在9606上顯示。呼叫192.168.1.25:9606有效,但localhost:5600不會

但是我仍然無法連接到192.168.1.1 IP上的SQL Server Express實例。我曾嘗試將192.168.1.1 IP添加到SQL Server綁定中,但似乎不起作用。

SQL Server TCP IP Settings

我可以從主機在10.10.4.19,1433 \ SQL2016連接,但在192.168.1.1,1433 \ SQL2016所以我假設無法連接在這裏手頭的問題。 Windows防火牆已禁用。

我已經設置了虛擬NAT網卡使用靜態IP 192.168.1.1還但仍處於192.168.1.1,1433無法連接到SQL Server實例\ SQL2016

network setup

+0

任何機會,我能得到背後的向下投票或評論,以幫助 – Mechanic

+0

這是一個很好的問題,一個原因(和答案都是upvoted),但是你可以讓你的原始問題更加明顯,並且將你的兩個編輯重定位在答案中(然後你可以接受) – VonC

回答

1

的最後一件事我必須做的是在主機服務器上啓用ipv4和ipv6(因爲ipv6用於一些身份驗證檢查,我猜)用於sql server express 2016。並添加了防火牆規則。

希望這可以幫助其他人獲得本地開發和單服務器docker部署的設置。

enter image description here

有一件事我還是不能做的是主機:容器端口映射