Docker windows 端口不可用:

Tec*_*tle 5 docker

Docker 新手。我正在 Win 10 计算机上运行 Visual Studio 2019 社区。安装了 Docker 桌面并创建了两个解决方案(service1 和 service2)。我正在尝试在自己的容器上运行这两个解决方案。

我能够使用以下命令构建并运行 service1:

docker run -it --rm -p 3000:80 --name mymicroservicecontainer mymicroservice
Run Code Online (Sandbox Code Playgroud)

请问3000:80是什么?80是端口吗?因为我能够使用浏览器中的http://localhost:3000/api/product/1运行我的 api 。

接下来,我尝试通过以下方式在它自己的容器上运行 service2:

docker run -it --rm -p 2000:80 --name myanotherservicecontainer myanotherservice
Run Code Online (Sandbox Code Playgroud)

由于端口是 2000,我想它应该可以工作,但是我收到以下错误:

docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:2000: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
Run Code Online (Sandbox Code Playgroud)

time="2020-04-08T14:22:41-04:00" level=error msg="等待容器时出错:上下文已取消"

那是因为我有 :80 与 service1 相同吗?解决办法是什么?我在命令提示符下以管理模式运行命令。

请帮忙。谢谢。

Kap*_*wal 4

docker run -it --rm -p 3000:80 --name mymicroservicecontainer mymicroservice
Run Code Online (Sandbox Code Playgroud)

第一个问题的答案是肯定的,80 是一个端口。基本上,-p 3000:80它将容器中的 TCP 端口 80 映射到 Docker 主机上的端口 3000。

您收到的服务错误是因为端口 2000 被其他进程占用。错误消息中也明确提到了这一点。

docker: Error response from daemon: Ports are not available
Run Code Online (Sandbox Code Playgroud)

如果您尝试将其映射到其他端口(在您的计算机上是免费的),那么它将按预期工作。

也许尝试-p 1111:80或者-p 1234:80

阅读本文以了解有关 docker 容器网络的更多详细信息。