一尘不染

多个Docker容器作为单个IP上的Web服务器

docker

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

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

sudo docker run -p 80:80 -t -i <yourname>/<imagename>

这样,我可以在计算机终端上执行以下操作:

curl http://hostIP:80/foobar

但是如何使用多个容器和多个Web服务器来处理呢?


阅读 496

收藏
2020-06-17

共1个答案

一尘不染

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

docker run -p 8080:80 -t -i <yourname>/<imagename>
docker run -p 8081:80 -t -i <yourname1>/<imagename1>

或在您的API容器前面放置一个代理(nginx,apache,清漆等)。

更新

做代理的最简单方法是将其链接到API容器,例如具有apache config

RewriteRule ^api1/(.*)$ http://api1/$1 [proxy]
RewriteRule ^api2/(.*)$ http://api2/$1 [proxy]

您可以这样运行容器:

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进行代理。

更新二:

在更现代的docker版本中,可以使用用户定义的网络代替上面显示的链接,以克服不赞成使用的链接机制的一些不便之处。

2020-06-17