当前位置: 首页 > 面试题库 >

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

吕皓
2023-03-14
问题内容

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

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

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

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

curl http://hostIP:80/foobar

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


问题答案:

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

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版本中,可以使用用户定义的网络代替上面显示的链接,以克服不赞成使用的链接机制的一些不便之处。



 类似资料:
  • 我想在Docker容器中启动两个不同的服务,并在其中一个退出后立即退出容器。我查看了supervisor,但找不到如何让它在一个托管应用程序退出后立即退出。它试图重启它们多达三次,就像标准设置一样,然后什么也不做。主管是否能够做到这一点,或者是否有其他工具可以做到这一点?如果还有一种方法可以让两个托管程序都写入到stdout,并标记它们的应用程序名,则会有好处,例如:

  • 本文向大家介绍Docker容器上用DockerFile部署多个tomcat服务的步骤,包括了Docker容器上用DockerFile部署多个tomcat服务的步骤的使用技巧和注意事项,需要的朋友参考一下 1、 [admin@JD ~]$ cd opt #进入根目录下的opt 里 2、 [admin@JD opt]$ mkdir web #创建Web 文件夹 3、 [admin@JD web]$ c

  • Http是一个比tcp更高级的协议,它描述了客户端浏览器如何与网页服务器进行通信。Go有自己的net/http包,我们来看看它。我们从一些简单的示例开始, 首先编写一个“Hello world!”:查看示例15.6 我们引入了http包并启动了网页服务器,和15.1的net.Listen("tcp", "localhost:50000")函数的tcp服务器是类似的,使用http.ListenAnd

  • 问题内容: 我有一台运行带有220 GB内存的Ubuntu 14.04的服务器,我想在该服务器上运行elasticsearch。根据文档,一个节点不应具有超过32 GB的RAM,因此我想我必须在一台计算机上运行多个节点才能利用所有RAM。我正在考虑运行4个节点,每个节点具有28 GB的内存。 如何将其设置为ubuntu服务,以便例如在系统重新引导后自动恢复所有节点?我想我必须以某种方式编辑/etc

  • 使用ws,Node.js WebSocket库,可以让多个服务器共享一个HTTP/S服务器。 有可能用socket.io做同样的事情吗?

  • 对于下面的场景是如何工作的,我有点困惑。这是一个非常简单的设置,所以我希望解释很简单。 我有一个单一的物理网卡主机。我创建了一个单一的macvlan子接口在桥接模式关闭这个物理网卡。然后我启动两个LXD/LXC容器。每个都有自己独特的MAC和IP,但是在配置文件中,我指定了与每个容器的父接口相同的单个macvlan子接口。 两个容器都可以毫无问题地访问网络。我还能够使用每个容器的唯一IP地址SSH