我怎么能连接到从链接的PHPdocker集装箱docker容器中的nginx虚拟主机?

我想使用Docker容器来隔离我的新项目基础架构,我是Docker中的新手。 我遇到了一个问题。 首先,我将展示我的configuration示例,然后我将解决这个问题。

configuration示例

nginx: restart: always image: nginx:latest expose: - 80 ports: - 8181:80 # - 80:80 volumes: - ../.:/code - ./docker/nginx/hosts:/etc/nginx/conf.d/ - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf links: - php php: restart: always build: docker/php5.6-fpm # image: php:5.6-fpm # ports: # - 9000:9000 volumes: - ../.:/code links: - redis_loc - postgres_loc - memcached_loc - rabbitmq_loc 

这是一个例子。 我已经放弃*_loc服务的详细信息。 所以,我有两个本地域的开发,如site1.locsite2.loc 。 我使用的是微服务架构, site2.locsite2.loc的微服务。

我有共同的PHP容器的所有微服务代码,我有共同的nginx容器的所有configuration了*.loc.confconfiguration文件的微服务。 Nginx监听Dockernetworking中的80端口。 主机通过主机上的8181端口可用。 在本地(主机)我有前nginx具有相同的*.locconfigurationconfiguration为代理8181类似物。 另外我还在我的/etc/hostslogging中

 127.0.0.1 site1.loc 127.0.0.1 site2.loc 

所以,我可以在浏览器中打开两个本地站点,并单独使用它们。

问题

问题是,site2.loc是一个微服务,所以它应该可以从site1.loc php代码访问。 而现在,当我试图从site1.loc PHP代码发送请求到site2.loc我收到错误:

 'stream_socket_client(): unable to connect to site2.loc:80 (php_network_getaddresses: getaddrinfo failed: Name or service not known)' 

PHP找不到去site2.loc的路。

我已经尝试在nginx和php容器上的extra_hosts -compose特性extra_hosts ,但是这对我没有帮助。

 # extra_hosts: # - "site1.loc:nginx" # - "site2.loc:nginx" 

我曾尝试configuration自定义networking,但后来我意识到,这是错误的方式。

另外我已经尝试jwilder/nginx-proxy ,但是它只是为本地机器,而不是内部PHP容器使vhosts。

我清楚的明白,问题的根源在于php容器内部的环境对于site2.loc主机并不了解。 我想我需要某种主机映射或dnsconfiguration。

但是我不知道如何实现这样的configuration,也找不到任何例子(我昨天半天search了一下)。

我怎样才能使site2.loc访问site1.loc的PHP代码?

UPD

我刚才发现我需要使用领事。 没有领事有没有其他办法?

UPD

有助于在extra_hosts中引用172.17.0.1的主机。 提示,如何select一个方法制作 – extra_hosts,dns,领事? 鉴于我有在服务器附近的几个项目,在容器或没有。

你需要外部访问你的微服务site2.loc? 如果没有,你可以在两个nginx容器中分割site1和site2,那么你可以在用户定义的networking中这样做:

  1. 创build一个名为“app-net”的networking
  2. 当你创build每个服务时,将它们连接到networking并给它们一个别名(–network-alias),假设你把别名site2放在你的微服务
  3. 在Docker中有一个内部DNS服务器,它将parsing容器的域名。 所以当你想从PHP代码访问site2时,只需使用“site2”即可将其parsing为PHP容器可访问的IP地址(如果它们都连接到同一个用户定义的networking)

只要确保PHP进程可以访问与nginx具有相同path的PHP文件。

编辑:在docker撰写我认为networking别名被设置automaticaly与服务名称
编辑2:实际上,docker工人正在设置一个networking自动https://docs.docker.com/compose/networking/#/networking-in-compose