簡體   English   中英

Windows容器群發布端口並且無法訪問

[英]Windows Container swarm publish port and not access

我使用Windows容器並嘗試創建docker swarm,我使用hyper-v創建了三個虛擬機,每個操作系統是Windows Server 2016。

windocker211    192.168.1.211
windocker212    192.168.1.212
windocker219    192.168.1.219

docker swarm節點為:

PS C:\ConsoleZ> docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
4c0g0o0uognheugw4do1a1h7y     windocker212          Ready               Active
bbxot0c8zijq7xw4lm86svgwp *   windocker219          Ready               Active              Leader
wftwpiqpqpbqfdvgenn787psj     windocker211          Ready               Active

我創建使用命令:

docker service create --name=demo5 -p 5005:5005 --replicas 6 192.168.1.245/cqgis/wintestcore:0.6

碼頭工人鏡像是asp.net核心應用程序,碼頭文件是:

FROM  192.168.1.245/win/aspnetcore-runtime:1.1.2
COPY . /app
WORKDIR /app

ENV ASPNETCORE_URLS http://*:5005

EXPOSE 5005/tcp

ENTRYPOINT ["dotnet", "dotnetcore.dll"]

然后創造成功:

PS C:\ConsoleZ> docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                                 PORTS
omhu7e0vo96s        demo5               replicated          6/6                 192.168.1.245/cqgis/wintestcore:0.6   *:5005->5005/tcp


PS C:\ConsoleZ> docker service ps demo5
ID                  NAME                IMAGE                                 NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
8pihnak9a2ei        demo5.1             192.168.1.245/cqgis/wintestcore:0.6   windocker212          Running             Running 59 seconds ago
ut3f3b9giu4w        demo5.2             192.168.1.245/cqgis/wintestcore:0.6   windocker219          Running             Running 47 seconds ago
iy1xjevt67yl        demo5.3             192.168.1.245/cqgis/wintestcore:0.6   windocker211          Running             Running about a minute ago
q7f1gnbwslr3        demo5.4             192.168.1.245/cqgis/wintestcore:0.6   windocker212          Running             Running about a minute ago
8zewaktcu32h        demo5.5             192.168.1.245/cqgis/wintestcore:0.6   windocker219          Running             Running about a minute ago
xq820kqwf3v9        demo5.6             192.168.1.245/cqgis/wintestcore:0.6   windocker211          Running             Running 55 seconds ago

但我的問題是我無法通過

http://192.168.1.219:5005/
http://192.168.1.219:5005/
http://192.168.1.219:5005/

當我使用命令

docker run -it -p 5010:5005 192.168.1.245/cqgis/wintestcore:0.6

我可以使用http://192.168.1.219:5010/獲得正確的結果

我的碼頭工人信息是

PS C:\ConsoleZ> docker info
Containers: 4
 Running: 3
 Paused: 0
 Stopped: 1
Images: 5
Server Version: 17.06.0-ce-rc1
Storage Driver: windowsfilter
 Windows:
Logging Driver: json-file
Plugins:
 Volume: local
 Network: l2bridge l2tunnel nat null overlay transparent
 Log: awslogs etwlogs fluentd json-file logentries splunk syslog
Swarm: active
 NodeID: bbxot0c8zijq7xw4lm86svgwp
 Is Manager: true
 ClusterID: 32vsgwrbn6ihvpevly71gkgxk
 Managers: 1
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Root Rotation In Progress: false
 Node Address: 192.168.1.219
 Manager Addresses:
  192.168.1.219:2377
Default Isolation: process
Kernel Version: 10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)
Operating System: Windows Server 2016 Datacenter
OSType: windows
Architecture: x86_64
CPUs: 8
Total Memory: 2.89GiB
Name: windock219
ID: 7AOY:OT6V:BTJV:NCHA:3OF5:5WR5:K2YR:CFG3:VXLD:QTMD:GA3D:ZFJ2
Docker Root Dir: C:\ProgramData\docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: -1
 Goroutines: 297
 System Time: 2017-06-04T19:58:20.7582294+08:00
 EventsListeners: 2
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 192.168.1.245
 127.0.0.0/8
Live Restore Enabled: false

Windows容器的Docker和Linux的Docker之間的網絡存在一些差異。 Windows容器使用HyperV網絡技術來提供docker使用的虛擬網絡功能。 因此,有些限制無法正常發揮作用,您可能無法在標准Docker文檔中找到或發現這些限制。

  • 首先,您無法使用回溯地址(127.0.0.1)或主機地址(192.168.1.xxx)訪問容器內部運行的Web端,您必須始終從遠程計算機上調用它。
  • 我看到您在Dockerfile中使用了暴露命令。 並不是很容易解釋,但是暴露是在主機或入口網絡之外的任何其他網絡中暴露端口。 如果您在非集群配置中執行此操作不是問題,但是在集群中不起作用。 我建議刪除“公開”命令。
  • Windows網絡存在一些未解決的問題。 有時,在容器重新啟動后,該端口仍處於使用狀態。 例如,重新引導主機系統后。 [ https://github.com/moby/moby/issues/21558][1]

使用此腳本,您可以刪除所有虛擬網絡設置:

Stop-Service docker
Get-ContainerNetwork | Remove-ContainerNetwork
Get-NetNat | Remove-NetNat
Get-VMSwitch | Remove-VMSwitch
Start-Service docker

我相信您需要以“主機”模式發布端口(docs.microsoft.com/en-us/virtualization/windowscontainers/…‌)。 而且,它將是正在運行的容器和主機之間的一對一端口映射,因此您將無法在同一端口上運行多個容器。 路由網格無法在Windows上運行。

由於WinNAT網絡限制,您無法從同一台計算機訪問容器的已發布端口。 但是您可以使用外部請求到達所需的端口。

在您的示例中,從192.168.1.219以外的計算機上,使用URL http://192.168.1.219:5005/訪問將成功。 如果請求來自那些機器之外,則URL的http://192.168.1.211:5005/http://192.168.1.212:5005/也將成功。

使用“主機”模式將成功:但是,您沒有利用“路由網格”功能的優勢,該功能允許從服務的任何節點(僅從單個節點)訪問服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM