我想使用Docker容器隔离我的新项目基础设施,我是Docker的新手。我被问题缠住了。首先,我将展示我的配置示例,然后我将解决这个问题。
Config示例
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.loc和site2.loc。我使用的是微服务架构,site2.loc是site1.loc的一种微服务。
对于所有微服务代码,我都有通用的php容器,对于配置了*.loc.conf配置文件的所有微服务,我都有通用的nginx容器。Nginx在Docker网络中收听80端口。此主机可通过主机上的8181端口获得。在本地(主机)机器上,我的前端nginx具有相同的*.loc配置,配置为8181类似物的代理。我的/etc/hosts记录里也有
127.0.0.1 site1.loc
127.0.0.1 site2.loc因此,我可以在浏览器中打开两个本地站点,并分别使用它们。
问题
问题是,site2.loc是一个微服务,所以它应该可以从site1.loc php代码中访问。现在,当我试图从site1.loc代码向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容器上使用docker-compose特性extra_hosts,但这并没有帮助我。
# extra_hosts:
# - "site1.loc:nginx"
# - "site2.loc:nginx"我试图配置自定义网络,但后来我意识到,这是错误的方式。
我也尝试过jwilder/nginx-proxy,但是它使vhost只对本地机器可用,而不是在php容器中。
我很清楚,问题的根源在于php容器中的环境对site2.loc主机一无所知。我想我需要配置某种类型的主机映射或dns。
但我不知道如何实现这样的配置,也找不到任何例子(我昨天搜索了半天)。
如何使site2.loc可由site1.locphp代码访问?
UPD
我刚刚发现我需要使用领事。没有领事还有别的办法吗?
UPD
参考extra_hosts中的172.17.0.1帮助指示宿主。提示符,如何更好地选择一个生产方法- extra_hosts,dns,领事?考虑到我在服务器上有几个项目,无论是在容器中还是在没有容器中。
发布于 2016-10-06 09:17:01
您需要外部访问您的微服务站点2.loc吗?如果不能,您可以将site1和site2拆分到两个nginx容器中,那么您可以在用户定义的网络中这样做:
只需确保PHP进程可以使用与nginx相同的路径访问PHP文件。
编辑:在docker撰写中,我认为网络别名是用服务名自动设置的。
EDIT2 :实际上,码头组合正在建立一个网络自动化的https://docs.docker.com/compose/networking/#/networking-in-compose
https://stackoverflow.com/questions/39870634
复制相似问题