我正在尝试运行 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
我还需要尝试应用什么其他解决方案?
我有同样的问题,用这个命令摆脱了它
NET stop HTTP
它停止了打印队列服务(德语中的“Druckwarteschlange”)。
不好的副作用,你不能再使用你的打印机了..
我有一个进程阻塞了我需要用于 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
同时查看资源监视器,看看是否能为您提供更多线索。
我尝试了在这里和其他帖子中找到的所有建议:
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
)net stop http
)net stop winnat; net start winnat
)restart-service hns
)这些都无法释放端口。
最后,我决定检查是否有任何可能导致它的最新 Windows 更新 - 过去两周没有任何新消息。
但是当我检查最近安装的应用程序时(使用 Bulk Crap Uninstaller - 太棒了!)我注意到昨天安装了两个“应用程序”,我绝对没有手动安装所以我认为它们以某种方式通过 Win Update 或自动应用程序更新:
卸载这些后,我又可以访问80端口了!
为确保不再发生,我保留了端口供我自己使用:
netsh int ipv4 add excludedportrange protocol=tcp startport=80 numberofports=1