docker 服务端hosts如何配置

新手上路,请多包涵

比如:我有两个域名,分别指向127.0.0.1
crm.domain.com
api.domain.com
docker搭建3个容器,分别:nginx,php,alpine

本地开发环境
用crm.domain.com/a.php 访问服务端。然后服务端又调用api.domain.com/b.php返回数据给a.php,但是会报错:

cURL error 7: Failed to connect to api.domain.com port 80: Connection refused (see http://curl.haxx.se/libcurl/c...

目前本地分别访问
crm.domain.com/a.php
api.domain.com/b.php
都是没有问题的。因为我在宿主机的/etc/hosts里指向了127.0.0.1'

我理解是要在服务端配下api.domain.com 的hosts 。我在nginx的容器里 配了,但没有用呀

阅读 3.8k
1 个回答

看了半天有点晕。

你现在的环境,是不是其实是 nginx 容器收到 客户端请求 a.php,之后这个 a.php 又去 请求 b.php?
如果是这样的话,a.php 去找 b.php 这个动作是在 php.fpm 这个容器里完成的,而 php 容器应该是既不知道 crm.domain.com 也不知道 api.domain.com ,因为那些本来都归 nginx 管,php 容器看到的 127.0.0.1是他容器自身,里面只有个php-fpm可用,他看不到 nginx 的 80 端口。

本身上了docker之后多个容器之间沟通就是有难度的。

当然这个需求本身是很常见,但是这么做不是很优雅,一般来讲如果有多个 domain ,个人建议是多开 nginx 并使用多端口独立处理的。

如果只用一个 nginx 的话,最好不仅在 /etc/hosts 写域名,还要在,还要写好 expose 和 links ,最好使用compose,保证多个容器间可以不经过宿主机直接通信。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题