我有一台运行 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 中的某些条目?
谢谢!
首先,像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.io 或 http://web.localtest.me 或类似的主机名。