Docker-win使用遇到问题

Windows Docker 启动容器报端口没有访问权限

在 win10 上启动 Docker Desktop 上的 Postgres 容器时,遇到报错,部分内容如下:

1
exposing port TCP 0.0.0.0:5432 -> 0.0.0.0:0: listen tcp 0.0.0.0:5432: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

最近都没有怎么动这环境。

可能解决方法,参考如下此处链接,该链接讨论了多种解决方案,均可尝试。

总结起来大概是因为 Hyper-V 动态的保留了一些端口,导致无法使用,在实际使用中这些端口会动态增加,在预留列表中的端口其他进程就无法使用。

最终我使用了如下方法:

  1. 在 powershell 中使用如下命令查看本地的保留端口:
1
netsh interface ipv4 show excludedportrange protocol=tcp
  1. 如果需要使用的端口在其中某一段中,那么停止 winnat 服务:

    注意,步骤2-4需要使用管理员权限操作,即右击以管理员身份运行。否则会提示“拒绝访问”,或 “没有权限”。

1
net stop winnat
  1. 将你需要使用的端口段从保留端口中删除,样例如下:
1
netsh int ipv4 delete excludedportrange protocol=tcp startport=3273 numberofports=100
  1. 重启 winnat 服务:
1
net start winnat
  1. 最后可以再查看一下本地的保留端口:

    1
    netsh interface ipv4 show excludedportrange protocol=tcp

注意,电脑重启后,重新查看本地保留端口,会发现有新增的端口。

操作过程可能遇到的问题

在删除端口段时可能遇到下面报错。

1
2
PS C:\Windows\system32> netsh int ipv4 delete excludedportrange protocol=tcp startport=3928 numberofports=100
找不到元素。

不受影响,此时会将多余的端口段全部删除,仅保留默认保留的。继续后续操作,因为列表中的端口是预留的,不会有什么影响。

1
2
3
4
5
6
7
8
9
10
PS C:\Windows\system32> netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围

开始端口 结束端口
---------- --------
3310 3408 *
50000 50059 *

* - 管理的端口排除。
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信