ReactJS 浏览器应用程序在 Docker Compose 网络中看不到东西
ReactJS browser app cannot see things in the Docker Compose network
我有一个 ReactJS 项目,它有自己的 Dockerfile,公开端口 3000:3000。
我还有一个 PHP 项目,它有自己的 Dockerfile,公开端口 80:80。 PHP 应用程序还有 MySQL、Redis 和 Nginx
的容器
对于 PHP 应用程序,我有一个 docker-compose 文件,它为 PHP、Nginx、MySQL 创建网络 (my-net
)和 Redis 进行通信。但是,我现在希望 ReactJS(在一个单独的项目中)能够与 PHP 应用程序通信。
我在React项目中添加了一个docker-compose文件,并从PHP项目my-net
中添加到网络并声明为external
所以它不会尝试创建它。
这似乎有效:从 ReactJS 容器,我可以 ping app
(我的后端服务的名称)并且它正常工作。但是,从 ReactJS 代码来看,如果我使用 axios
之类的东西来尝试命中后端 API,它无法解析 app
或 http://app
或任何变体。但是,如果我将其替换为 axios
.
,它可以访问底层 IP 地址
因此主机名解析似乎存在一些问题,大概是在 axios
/ JavaScript 端。有没有我遗漏的东西或者这不起作用的原因?
当 JavaScript 在浏览器中运行时(在 Docker 之外)您不能使用 app
因为它只能在 Docker 网络中使用(通过嵌入式 DNS 服务器)。
要从外部访问您的 PHP 服务器,请改用本地主机和公开的端口 (80)。
我有一个 ReactJS 项目,它有自己的 Dockerfile,公开端口 3000:3000。
我还有一个 PHP 项目,它有自己的 Dockerfile,公开端口 80:80。 PHP 应用程序还有 MySQL、Redis 和 Nginx
的容器对于 PHP 应用程序,我有一个 docker-compose 文件,它为 PHP、Nginx、MySQL 创建网络 (my-net
)和 Redis 进行通信。但是,我现在希望 ReactJS(在一个单独的项目中)能够与 PHP 应用程序通信。
我在React项目中添加了一个docker-compose文件,并从PHP项目my-net
中添加到网络并声明为external
所以它不会尝试创建它。
这似乎有效:从 ReactJS 容器,我可以 ping app
(我的后端服务的名称)并且它正常工作。但是,从 ReactJS 代码来看,如果我使用 axios
之类的东西来尝试命中后端 API,它无法解析 app
或 http://app
或任何变体。但是,如果我将其替换为 axios
.
因此主机名解析似乎存在一些问题,大概是在 axios
/ JavaScript 端。有没有我遗漏的东西或者这不起作用的原因?
当 JavaScript 在浏览器中运行时(在 Docker 之外)您不能使用 app
因为它只能在 Docker 网络中使用(通过嵌入式 DNS 服务器)。
要从外部访问您的 PHP 服务器,请改用本地主机和公开的端口 (80)。