鍍金池/ 問答/PHP  Linux  網(wǎng)絡(luò)安全/ docker 服務(wù)端hosts如何配置

docker 服務(wù)端hosts如何配置

比如:我有兩個(gè)域名,分別指向127.0.0.1
crm.domain.com
api.domain.com
docker搭建3個(gè)容器,分別:nginx,php,alpine

本地開發(fā)環(huán)境
用crm.domain.com/a.php 訪問服務(wù)端。然后服務(wù)端又調(diào)用api.domain.com/b.php返回?cái)?shù)據(jù)給a.php,但是會(huì)報(bào)錯(cuò):

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
都是沒有問題的。因?yàn)槲以谒拗鳈C(jī)的/etc/hosts里指向了127.0.0.1'

我理解是要在服務(wù)端配下api.domain.com 的hosts 。我在nginx的容器里 配了,但沒有用呀

回答
編輯回答
你的瞳

看了半天有點(diǎn)暈。

你現(xiàn)在的環(huán)境,是不是其實(shí)是 nginx 容器收到 客戶端請(qǐng)求 a.php,之后這個(gè) a.php 又去 請(qǐng)求 b.php?
如果是這樣的話,a.php 去找 b.php 這個(gè)動(dòng)作是在 php.fpm 這個(gè)容器里完成的,而 php 容器應(yīng)該是既不知道 crm.domain.com 也不知道 api.domain.com ,因?yàn)槟切┍緛矶細(xì)w nginx 管,php 容器看到的 127.0.0.1是他容器自身,里面只有個(gè)php-fpm可用,他看不到 nginx 的 80 端口。

本身上了docker之后多個(gè)容器之間溝通就是有難度的。

當(dāng)然這個(gè)需求本身是很常見,但是這么做不是很優(yōu)雅,一般來講如果有多個(gè) domain ,個(gè)人建議是多開 nginx 并使用多端口獨(dú)立處理的。

如果只用一個(gè) nginx 的話,最好不僅在 /etc/hosts 寫域名,還要在,還要寫好 expose 和 links ,最好使用compose,保證多個(gè)容器間可以不經(jīng)過宿主機(jī)直接通信。

2018年5月22日 05:29