作者:善达集团_187 | 来源:互联网 | 2023-05-27 20:15
我在一台机器上有多个docker容器.在每个容器上运行一个进程和一个Web服务器,为该进程提供API.
我的问题是,当默认端口为80时,如何从浏览器访问API?为了能够访问docker容器内的Web服务器,我执行以下操作:
sudo docker run -p 80:80 -t -i /
这样我可以从我的电脑终端做到:
curl http://hostIP:80/foobar
但是如何使用多个容器和多个Web服务器来处理这个?
1> Mykola Gurov..:
您可以公开多个端口,例如
docker run -p 8080:80 -t -i /
docker run -p 8081:80 -t -i /
或者在API容器前放置代理(nginx,apache,varnish等).
更新:
执行代理的最简单方法是将其链接到API容器,例如使用apache配置
RewriteRule ^api1/(.*)$ http://api1/$1 [proxy]
RewriteRule ^api2/(.*)$ http://api2/$1 [proxy]
你可以这样运行你的容器:
docker run --name api1 /
docker run --name api2 /
docker run --link api1:api1 --link api2:api2 -p 80:80
这可能有些麻烦,但是如果你需要重新启动api容器,因为代理容器也必须重新启动(链接器在docker上相当静态).如果这成为问题,您可能会看到无花果或自动代理配置等方法:http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/.后面的链接还显示了使用nginx进行代理.
更新II:
在更现代版本的docker中,可以使用用户定义的网络而不是上面显示的链接来克服已弃用的链接机制的一些不便之处.
2> Mark O'Conno..:
一次只允许一个进程绑定到一个进程.因此,运行多个容器意味着每个容器都将暴露在不同的端口号上.Docker可以使用"-P"属性自动为您执行此操作.
sudo docker run -P -t -i /
您可以使用"docker port"和"docker inspect"命令查看分配给每个容器的实际端口号.