Windows 10,端口 80 的 Docker 问题,端口不可用:listen tcp 0.0.0.0:80:

问题描述 投票:0回答:2

我正在尝试运行 docker 应用程序...

λ docker run -p 80:80 -p 8080:8080 --name billingapp sotobotero/udemy-devops:0.0.1
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

我试图应用这个答案...... https://stackoverflow.com/a/65274083/811293

λ netsh int ipv4 add excludedportrange protocol=tcp startport=80 numberofports=1
The process cannot access the file because it is being used by another process.

我正在尝试 https://stackoverflow.com/a/66198584/811293

D:\Programs\cmder\config\profile.d
λ docker container rm billingapp
billingapp

D:\Programs\cmder\config\profile.d
λ net stop winnat
The Windows NAT Driver service is not started.

More help is available by typing NET HELPMSG 3521.


D:\Programs\cmder\config\profile.d
λ docker run -p 80:80 -p 8080:8080 --name billingapp sotobotero/udemy-devops:0.0.1
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

D:\Programs\cmder\config\profile.d
λ

正在检查资源监视器...

检查

netstat

D:\Programs\cmder\config\profile.d
λ netstat -aon | find /i "listening"  | findStr ":80"
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:808            0.0.0.0:0              LISTENING       4140
  TCP    [::]:80                [::]:0                 LISTENING       4
  TCP    [::]:808               [::]:0                 LISTENING       4140

D:\Programs\cmder\config\profile.d
λ

使用

tasklist

D:\Programs\cmder\config\profile.d
λ tasklist /FI "PID eq 4"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
System                           4 Services                   0        144 K

D:\Programs\cmder\config\profile.d
λ

版本 Docker 桌面:

PS C:\WINDOWS\system32> Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName,DisplayVersion | where {$_.DisplayName -like "Docker*"}

DisplayName    DisplayVersion
-----------    --------------
Docker Desktop 2.5.0.0


PS C:\WINDOWS\system32>

另一边:

D:\Programs\cmder\config\profile.d                             
λ docker --version                                             
Docker version 19.03.13, build 4484c46d9d                      
                                                               
D:\Programs\cmder\config\profile.d                             
λ docker version                                               
Client: Docker Engine - Community                              
 Cloud integration: 1.0.1                                      
 Version:           19.03.13                                   
 API version:       1.40                                       
 Go version:        go1.13.15                                  
 Git commit:        4484c46d9d                                 
 Built:             Wed Sep 16 17:00:27 2020                   
 OS/Arch:           windows/amd64                              
 Experimental:      false                                      
                                                               
Server: Docker Engine - Community                              
 Engine:                                                       
  Version:          19.03.13                                   
  API version:      1.40 (minimum version 1.12)                
  Go version:       go1.13.15                                  
  Git commit:       4484c46d9d                                 
  Built:            Wed Sep 16 17:07:04 2020                   
  OS/Arch:          linux/amd64                                
  Experimental:     false                                      
 containerd:                                                   
  Version:          v1.3.7                                     
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175   
 runc:                                                         
  Version:          1.0.0-rc10                                 
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd   
 docker-init:                                                  
  Version:          0.18.0                                     
  GitCommit:        fec3683                                    
                                                               
D:\Programs\cmder\config\profile.d    

我还需要尝试应用什么其他解决方案?

docker windows-10 port docker-desktop
2个回答
6
投票

我有同样的问题,用这个命令摆脱了它

NET stop HTTP

它停止了打印队列服务(德语中的“Druckwarteschlange”)。

不好的副作用,你不能再使用你的打印机了..


0
投票

我有一个进程阻塞了我需要用于 docker 容器的端口,并且花了很长时间才解决。在我的例子中,它也是使用端口 80 的 PID 4。

我想我会总结我在尝试解决时发现的所有潜在问题和解决方案——希望将来对其他人有用。


对于任何新来的人,您可以按照以下步骤使用相应的端口调查服务以尝试弄清楚它是什么。

在 Powershell 中我们可以检查哪个进程正在使用这个端口:

netstat -aon | findStr /i "LISTENING"  | findStr ":80"

检查这是什么过程:

tasklist /FI "PID eq 4"

另一种使用端口获取进程ID的方法:

Get-Process -Id (Get-NetTCPConnection -LocalPort 80).OwningProcess

检查端口是否已被其他进程保留使用:

netsh int ipv4 show excludedportrange protocol=tcp

同时查看资源监视器,看看是否能为您提供更多线索。


我尝试了在这里和其他帖子中找到的所有建议:

这些都无法释放端口。

最后,我决定检查是否有任何可能导致它的最新 Windows 更新 - 过去两周没有任何新消息。

但是当我检查最近安装的应用程序时(使用 Bulk Crap Uninstaller - 太棒了!)我注意到昨天安装了两个“应用程序”,我绝对没有手动安装所以我认为它们以某种方式通过 Win Update 或自动应用程序更新:

  • Microsoft Edge Webview 2 运行时
  • 网络组件

卸载这些后,我又可以访问80端口了!

为确保不再发生,我保留了端口供我自己使用:

netsh int ipv4 add excludedportrange protocol=tcp startport=80 numberofports=1
© www.soinside.com 2019 - 2024. All rights reserved.