You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一Docker宿主机不同容器部署站点的正确配置方法

Docker单宿主机多容器独立站点托管实现方案

你之前在容器内部配置HTTP重定向/重写规则不生效,核心原因是端口映射是Docker宿主机iptables层面实现的转发逻辑,容器内的服务默认收到的是转发后的流量,感知不到宿主机的端口、域名信息,不需要在容器内部做相关配置,按以下方案实现即可:

基础端口映射方案(匹配你给出的映射规则需求)

直接使用Docker原生端口映射功能就能实现,不需要额外组件:

  • 启动container1(apache)命令:
    docker run -d -p 8080:80 --name container1 -v /本地站点1根目录:/usr/local/apache2/htdocs httpd:latest
    参数说明:-p 宿主机端口:容器端口表示将宿主机对应端口的所有请求转发到容器的对应端口,-v参数是将本地站点文件挂载到apache默认站点目录,你也可以替换成自己编译的apache镜像。
  • 启动container2(apache)命令:
    docker run -d -p 8081:80 --name container2 -v /本地站点2根目录:/usr/local/apache2/htdocs httpd:latest

配置完成后,访问http://example1.com:8080即可打开container1托管的站点,访问http://example2.com:8081即可打开container2托管的站点。

优化方案:无端口号访问

如果不想让用户访问时携带端口号,可以通过反向代理实现80端口统一入口,推荐用Nginx实现,步骤如下:

  • 先创建独立的Docker网络,确保代理容器和业务容器网络互通:
    docker network create web-network
  • 启动两个apache业务容器,不需要映射宿主机端口:
    docker run -d --name container1 --network web-network -v /本地站点1根目录:/usr/local/apache2/htdocs httpd:latest
    docker run -d --name container2 --network web-network -v /本地站点2根目录:/usr/local/apache2/htdocs httpd:latest
  • 启动Nginx代理容器,映射宿主机80端口:
    docker run -d -p 80:80 --name nginx-proxy --network web-network -v /本地Nginx配置目录:/etc/nginx/conf.d nginx:latest
  • 在本地Nginx配置目录新增配置文件proxy.conf,内容如下:
server {
    listen 80;
    server_name example1.com;
    location / {
        proxy_pass http://container1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
server {
    listen 80;
    server_name example2.com;
    location / {
        proxy_pass http://container2:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

配置重载Nginx后,直接访问http://example1.com和http://example2.com即可分别访问对应站点,不需要携带端口号。

内容的提问来源于stack exchange,提问作者tfonias74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:24:05