首页 > 解决方案 > 使用 Docker 容器的静态 IP 在另一个网络上运行 Web 应用程序

问题描述

我在端口 8086 上部署了一个演示 Web API 项目。我可以使用 localhost:8086/api/controllername 在本地浏览器上运行它,还可以使用本地机器 IP 地址,例如:192.0.0.0:8086/api/controllername。我尝试从同一 LAN 上的另一台计算机访问 URL,并且我能够访问它。

但现在我想从其他网络上的机器(公开)访问它。如何分配静态 IP,以便无论网络如何,我都可以从任何机器使用 API?我使用以下命令创建了一个网络

 docker network create --driver bridge --subnet 172.18.0.0/16 -- gateway=172.18.0.1 IPStatic

 docker network connect --ip 172.18.0.2 IPStatic Containerid.

但无法使用 172.18.0.2:8086/api 访问 api。我错过了什么吗?我正在使用 asp.net core web api,我对 Docker 还很陌生。

标签: dockerasp.net-core

解决方案


为此,您始终使用主机 IP 地址,就像您在 Docker 之外运行服务一样。容器私有 IP 地址无法从其他主机访问(在某些平台上甚至无法从同一主机上的外部 Docker 访问);手动设置它们或尝试查找它们通常是错误的。

如果此服务有自己的 IP 地址特别重要,您需要让您的网络管理员为主机分配一个额外的地址。该docker run -p选项只能将服务绑定到特定的网络接口或地址。在 Linux 主机上我可能会运行

# Assign the alias address
ifconfig eth0:0 192.0.0.2

# Run the service bound to only this interface
docker run -p 192.0.0.2:80:8080 ...

您可能需要重新配置其他服务以不侦听此新接口。对于 Docker 服务,您将使用相同的docker run -p选项仅绑定到主机的主接口和 localhost (127.0.0.1);非 Docker 服务的配置是特定于服务的。


推荐阅读