加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何托管在同一服务器上公开端口80的两个Docker容器

发布时间:2020-12-16 03:53:23 所属栏目:安全 来源:网络整理
导读:我有两个客户端需要连接到端口80的网站.每个网站都在自己的容器中运行.我想在同一个Docker主机上运行两个容器. 我知道端口80只能在主机上暴露一次.有哪些解决方案具有最小的开销/管理,这将允许我在同一主机上简单地运行两个容器(同时仍然允许客户端到达端口8

我有两个客户端需要连接到端口80的网站.每个网站都在自己的容器中运行.我想在同一个Docker主机上运行两个容器.

我知道端口80只能在主机上暴露一次.有哪些解决方案具有最小的开销/管理,这将允许我在同一主机上简单地运行两个容器(同时仍然允许客户端到达端口80上的每个容器)?

网站1和网站2都应该在端口80上显示客户端Web浏览器并且具有友好URL(即:www.web1.com,www.web2.com)

最佳答案
使用nginx反向代理:

>在主机上安装Nginx.在Debian / Ubuntu上:apt-get install nginx.注意:我假设您已经在主机上没有apache或其他Web服务器……
>对于每个站点,在目录/ etc / nginx / sites-available中写入nginx站点文件
将该站点重定向到docker容器的http,该http将在其他预先安排的端口上运行(例如,2001,2002,…).每个站点都有自己的文件,如下所示,但每个站点都有不同的预先安排的端口.外部用户将在相同IP地址但具有不同网站名称的端口80访问这些,并且从这些名称中,nginx将无形地处理必要的内部连接.
>符号链接站点文件,以便它们显示在目录/ etc / nginx / sites-enabled中并重新启动nginx.稍后,如果您需要暂时禁用对站点的访问,则可以删除其中一个链接并重新启动nginx.
>通过向/etc/rc.local添加docker run命令,并将预先安排好的主机端口(localhost:2001)重定向到容器端口80,例如,在系统重启时启动容器. docker run -d -p localhost:2001:80 imageA

如果容器关闭,您将从nginx收到网关错误.这可以自定义以显示自定义HTML页面.为了更加健壮,最好在supervisord或其他重新生成死进程的进程管理器中管理容器.

以下是重定向到端口2001的示例nginx站点文件:

upstream dockerA { 
         server localhost:2001;
}

server {
       listen 192.168.1.8:80;  // REPLACE WITH HOST NUMERIC IP ADDRESS
       root /var/web/siteAstaticfiles;
       index index.html;
       server_name www.siteA.com;

       location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://dockerA;
        }               
}

在此示例中,虽然为站点A设置了HTML文件的本地磁盘目录,但不使用它.而是将所有请求发送到上游.我没有测试是否可以安全地省略根和索引行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读