上下文
我有一个托管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和容器特定端口暴露给用户。
让用户访问容器的最佳方法是什么?
答案 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
容器。