无法设置网络从外部访问docker容器IP?

时间:2018-02-16 10:36:34

标签: docker networking containers

上下文
我有一个托管UI的Web服务器,用户可以从中请求我的产品的模拟器实例。每个模拟器实例都是在nodejs上运行的webapp。当用户从UI请求模拟器实例时,我会生成一个docker容器。我想向用户返回一个IP地址(+端口),可以从中访问该仿真器容器 注意:目前,docker和面向用户的Web服务器正在同一系统上运行。

问题:
1)docker0网络上的默认容器只能通过主机上的本地IP地址访问。例如http://172.17.0.5。我无法使用http://localhost:32768访问容器(容器以-P启动,并被分配了端口32768)。我收到一条消息,表明无法访问该网站。

2)我无法使用docker主机网络驱动程序,因为模拟器在内部使用了我不希望在主机网络中公开的端口

3)我不想使用macvlan驱动程序,因为我将耗尽太多的IP。

是否可能将主机上的各种端口映射到docker0子网上的IP?如果是,我该如何解决这个问题?如果可以,我可以将主机IP和容器特定端口暴露给用户。

让用户访问容器的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

nginx容器如何充当代理?使您的容器始终具有相同的名称。

提供新的应用实例:

docker run -d --rm --name=static_prefix__unique_id your_image

拥有通配符域:

unique_id.yourdomain.com

或者简单地说:

yourdomain.com/unique_id

您可以动态代理请求(我假设您为nodejs应用程序使用端口3000):

proxy_pass http://static_prefix__$extractedNameFromRequestUri:3000

Docker将为您完成艰苦的工作,并将流量从外部路由到static_prefix__unique_id容器。