我有一个带有自己的Dockerfile的ReactJS项目,暴露端口3000:3000。
我还有一个带有自己的Dockerfile的PHP项目,暴露端口80:80。 PHP应用程序还有MySQL,Redis和Nginx的容器
对于PHP应用程序,我有一个docker-compose文件,可以为PHP,Nginx,MySQL和Redis创建一个网络(my-net
)进行通信。但是,我现在希望ReactJS(在一个单独的项目中)能够与PHP应用程序通信。
我在React项目中添加了一个docker-compose文件,并将其从PHP项目my-net
添加到网络中,并将其声明为external
,以便它不会尝试创建它。
这似乎有效:从ReactJS容器,我可以ping app
(我的后端服务的名称),它可以正常工作。但是,根据ReactJS代码,如果我使用axios
之类的内容尝试点击后端API,则无法解析app
或http://app
或任何变体。但是,如果我将其替换为axios
。
因此主机名解析似乎存在一些问题,可能是在axios
/ JavaScript端。有什么我想念的或者这是不起作用的原因吗?
答案 0 :(得分:3)
当JavaScript在浏览器中运行时(在Docker之外),您无法使用app
,因为这只能在Docker网络中使用(通过嵌入式DNS服务器)。
要从外部访问您的PHP服务器,请使用localhost和公开的端口(80)。