2017-05-19 101 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

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