System.Net.Sockets.SocketException: 'An attempt was made to access a socket in a way forbidden by its access permissions.'

System.Net.Sockets.SocketException: 'An attempt was made to access a socket in a way forbidden by its access permissions.'

我在本地应用程序中有一个 tcp 侦听器,在一个 docker 容器中有另一个应用程序。在 docker 容器中,我公开端口 5555:5555 以在应用程序 docker 与正在侦听 127.0.0.1:5555.

的 tcp 侦听器之间建立套接字

问题是当我在 docker 容器中暴露端口时 (-p 5555:5555) windows 排除这个端口。

enter image description here

这就是为什么我不能 运行 我的 tcp 侦听器,我得到 System.Net.Sockets.SocketException 的原因:'An attempt was made to access a socket in a way forbidden by its access permissions.'

我没有找到解决办法,所以最后我为我的tcp服务器创建了一个新的容器,并在容器之间建立了一个网络。

docker network create --driver bridge nat

在 docker-compose 中定义网络并为我的 tcpServer 提供一个静态 ip

services:
  tcpServer:
    networks:
      test:
        ipv4_address: 172.18.192.157
    ....

networks:
  test:
    external:
      name: nat

我首先尝试设置主机网络,但我意识到此功能在 windows 中不可用。

  • 主机网络驱动程序仅适用于 Linux 主机,不支持 Docker Desktop for Mac,Docker Desktop for Windows,或 Docker Windows 服务器
  • 的 EE

Docker network documentation