首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个docker容器作为单个IP上的web服务器

多个docker容器作为单个IP上的web服务器
EN

Stack Overflow用户
提问于 2015-01-08 05:09:35
回答 2查看 27.3K关注 0票数 20

我在一台机器上有多个docker容器。在每个容器上运行一个进程和为该进程提供API的web服务器。

我的问题是,当默认端口为80时,如何从浏览器访问API?为了能够访问docker容器中的web服务器,我执行以下操作:

代码语言:javascript
复制
sudo docker run -p 80:80 -t -i <yourname>/<imagename>

这样我就可以在我的电脑终端上这样做了:

代码语言:javascript
复制
curl http://hostIP:80/foobar

但是如何在多个容器和多个web服务器上处理这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-08 05:28:39

您可以公开多个端口,例如

代码语言:javascript
复制
docker run -p 8080:80 -t -i <yourname>/<imagename>
docker run -p 8081:80 -t -i <yourname1>/<imagename1>

或者放置一个代理( nginx、apache、varnish等)在你的API容器前面。

更新

执行代理的最简单方法是将其链接到API容器,例如,使用apache配置

代码语言:javascript
复制
RewriteRule ^api1/(.*)$ http://api1/$1 [proxy]
RewriteRule ^api2/(.*)$ http://api2/$1 [proxy]

你可以这样运行你的容器:

代码语言:javascript
复制
docker run --name api1 <yourname>/<imagename>
docker run --name api2 <yourname1>/<imagename1>
docker run --link api1:api1 --link api2:api2 -p 80:80 <my_proxy_container>

不过,如果您需要重新启动api容器,这可能会有些麻烦,因为代理容器也必须重新启动( docker上的链接还相当静态)。如果这成为一个问题,您可以考虑使用诸如fig或自动更新代理配置:http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/之类的方法。后面的链接还显示了使用nginx进行代理。

更新II:

在更现代的docker版本中,可以使用user defined network代替上面显示的链接,以克服过时链接机制的一些不便之处。

票数 29
EN

Stack Overflow用户

发布于 2015-01-08 05:28:38

一次只允许一个进程绑定到一个端口。因此,运行多个容器意味着每个容器都将暴露在不同的端口号上。Docker可以通过使用"-P“属性自动为您完成此操作。

代码语言:javascript
复制
sudo docker run -P -t -i <yourname>/<imagename>

您可以使用"docker port“和"docker inspect”命令来查看分配给每个容器的实际端口号。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27828699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档