docker - Docker compose PHP 容器需要使用 Host 标头访问 nginx 代理。如何?
问题描述
我有 3 个容器。作为 nginx 反向代理的容器:
nginx-proxy:
image: jwilder/nginx-proxy:latest
ports:
- 80:80
- 443:443
networks:
- network
后面是该网络上的两个 php fpm 容器。容器 A 和容器 B 分别具有主机名 A 和 B。我还将这些添加到我的本地主机文件中:
127.0.0.1 A
127.0.0.1 B
所以我可以从我的本地主机与他们联系。两者都响应 fastCGI 请求。
现在我需要在 A 中发出 Guzzle 请求以转到 B。这应该通过 nginx 代理。如何向容器 A 的 hostsfile 添加一个条目,以便对 B 的请求将nginx-proxy
与 header一起发送Host: B
。但添加
extra_hosts:
- "B:nginx-proxy"
行不通,除了硬编码之外,我找不到任何其他方法,出于明显的原因,我不想这样做。
码头工人撰写文件:
containerA:
build:
context: 'docker'
volumes:
- .:/var/www/html
- ./docker/www.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
networks:
- network
environment:
VIRTUAL_HOST: containerA
VIRTUAL_ROOT: /var/www/html/public/index.php
VIRTUAL_PROTO: fastcgi
containerB:
build:
context: 'docker'
volumes:
- .:/var/www/html
- ./docker/www.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
networks:
- network
environment:
VIRTUAL_HOST: containerB
VIRTUAL_ROOT: /var/www/html/public/index.php
VIRTUAL_PROTO: fastcgi
nginx-proxy:
image: jwilder/nginx-proxy:latest
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- network
environment:
DEFAULT_HOST: containerA
networks:
network:
driver: bridge
解决方案
在 docker-compose 文件中,您已准备好在容器 A 和 B 中放置环境变量 - “VIRTUAL_HOST”?
services:
proxy:
........
........
containerA:
........
envirinment:
VIRTUAL_HOST=A
containerB:
........
envirinment:
VIRTUAL_HOST=B
如果你试过这个,也许完整的 docker-file 会对我们有所帮助。干杯
推荐阅读
- visual-studio - 如何在 msbuild 宏中获取 nuget 存储库路径?
- jestjs - 清除测试之间的笑话不工作
- python - 使用 Selenium 实现边缘自动化 - 不断需要凭据
- ios - 带有动态页脚的 UIScrollView
- python - 如何在条件中使用列的滞后值填充 Pandas 中的另一列
- swift - 选择随机函数的聪明方法
- c# - 正则表达式替换以匿名化名称
- javascript - 从html获取高度并插入状态
- git - 使用 Gogs 和 Drone 构建 CI/CD 平台时,管道出现“无法解析主机”
- cookies - 记住我 cookie cakephp 4 在注销后无法正常工作