如何通过 URL 访问同一个 docker 中的多个网站,而无需编辑我的主机文件

问题描述 投票:0回答:1

我有一台运行 Docker 引擎的 Windows 11 计算机。我的 Docker 容器之一是带有 PHP 的 Apache 容器。

我想在这个容器中运行多个网站。为了告诉 Apache 用户正在从浏览器请求哪个站点,我在复制到 DOcker 容器中的 Apache conf 文件中使用了

servername
条目。

例如:

ServerName site1.docker
ServerName site2.docker

为了告诉我的 Windows 系统如何访问 Docker 容器,我编辑我的 Hosts 文件 (c:\windows\system32\drivers tc\hosts) 并添加以下 URL:

  127.0.0.1 site1.docker site2.docker

但是,每次添加新站点时,我都需要记住将此 URL 添加到

hosts
文件中。有没有更好的解决方案,例如docker 文件的 docker-compose 中的某些条目?

谢谢!

docker apache hosts
1个回答
0
投票

首先,像sslip.io这样的服务是存在的。这些服务意味着您可以使用

http://site1.localtest.me
http://site1.127-0-0-1.sslip.ip
等名称作为本地主机的别名。

接下来。反向代理。将 Caddy 或 Traefik 添加到您的撰写文件中。

此示例使用 Traefik 监听端口 80。然后 Traefik 扫描容器中的标签并发送匹配的请求。

services:
  ingress:
    image: traefik:v3.2
    command: |
      --api.insecure
      --providers.docker
    networks:
      - www
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 80:80
    labels:
      traefik.http.routers.ingress.rule: HostRegexp("traefik.*")
      traefik.http.services.ingress.loadbalancer.server.port: 8080

  web:
    image: nginx:latest
    networks:
      - www
    labels:
      traefik.http.routers.web.rule: HostRegexp("web.*")

networks:
  www:

如果您独立运行 Traefik 服务并预先创建 www 网络,那么它不需要成为您的应用程序撰写文件的一部分。

您可以在浏览器中使用 http://traefik.127-0-0-1.sslip.iohttp://web.localtest.me 或类似的主机名。

© www.soinside.com 2019 - 2024. All rights reserved.