Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose PHP容器需要使用主机头点击nginx代理。怎么用?_Docker_Nginx_Proxy_Fastcgi_Guzzle - Fatal编程技术网

Docker compose PHP容器需要使用主机头点击nginx代理。怎么用?

Docker compose PHP容器需要使用主机头点击nginx代理。怎么用?,docker,nginx,proxy,fastcgi,guzzle,Docker,Nginx,Proxy,Fastcgi,Guzzle,我有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 所以我可以从我的本地主机与他们联系。两者都

我有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
,标题为
Host:B
。但是增加

extra_hosts:
    - "B:nginx-proxy"
不会工作,我找不到任何其他方式,除了硬编码,这是我不想做的明显原因

Docker编写文件:

  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文件中,您已准备好将环境变量“VIRTUAL_HOST”放置在容器A和B中

services:
  proxy:
    ........
    ........
  containerA:
    ........
    envirinment:
      VIRTUAL_HOST=A

  containerB:
    ........
    envirinment:
      VIRTUAL_HOST=B
如果你尝试过这个,也许完整的docker文件会对我们有所帮助。
干杯

是的,我做到了。但是containerA无法直接联系containerB,因为它只响应来自nginx代理的fastcgi请求。因此路由应该是
containerA->nginx代理,头主机为:containerB->containerB