首页 > 解决方案 > docker - Azure Container Instance - 如何使我的容器可从外部访问和识别?

问题描述

我有 Windows 容器,它应该访问外部 VM 数据库(不在容器中,比如说 VM1),所以我会为它们定义 l2bridge 网络驱动程序,以便使用相同的虚拟网络。

docker network create -d "l2bridge" --subnet 10.244.0.0/24 --gateway 10.244.0.1 
-o com.docker.network.windowsshim.vlanid=7 
-o com.docker.network.windowsshim.dnsservers="10.244.0.7" my_transparent

所以我想我们需要坚持这一点。但是现在我还需要让我的容器可以从外部访问,在端口 9000 上,从其他容器以及其他 VM 访问。我想这必须根据它的名称(主机名)来完成,因为每次重启后 IP 都会改变。我应该如何让我的容器可以从其他一些 VM2 虚拟机访问 - 我应该在网络配置中进行任何修改吗?或者我只是为了确保他们都使用相同的 DNS 服务器?当然我会公开端口,但我应该做任何额外的网络配置以允许该特定端口上的流量吗?我读过默认情况下不允许网络流量,并且 Windows 可能会阻止某些事情。

我会很感激这方面的帮助。谢谢

标签: azuredockerdnsdockerfiledocker-networking

解决方案


看来您不使用 Azure 容器实例,您只是在 Windows VM 中运行容器。如果我是对的,使容器可以在外部访问的最好方法是在不设置网络的情况下运行容器,只需要将端口映射到主机端口即可。然后可以通过暴露的端口在外部访问容器。这是示例命令:

docker run --rm -d -p host_port:container_port --name container_name image

然后就可以通过公网IP和VM的主机端口访问外面的容器了。

更新:

好的,如果您使用 ACI 通过 docker-compose 部署容器,那么您需要知道 ACI 不支持 VNet 中的 Windows 容器。这意味着无法在 VNet 中使用专用 IP 创建 Windows 容器。

如果您使用 Linux 容器,则可以将容器部署在 VNet 中,但您需要按照此处的步骤进行操作。然后容器具有专用 IP,并且可以通过该专用 IP 在 VNet 中访问。


推荐阅读