我有两个 Docker 容器,一个运行 React 应用程序(使用 create-react-app 构建),另一个运行 Node 应用程序 API。我设置了一个 docker-compose 文件,并根据 documentation我应该能够使用服务名称在容器之间进行通信。
但是,当我尝试从 React 应用程序向 API 的 /login
端点发送请求时,我收到了 net::ERR_NAME_NOT_RESOLVED
错误。我正在使用 Unirest 发送请求。
我在网上进行了大量的挖掘,发现了一些描述类似问题的内容,但仍然无法找到解决方案。当我在 React 容器中运行 cat/etc/resolve.conf
(请参阅 this 问题)时,带有我的 API 的容器不会显示,但 Docker 对我来说仍然相当新,所以我不确定这是否是问题的一部分。我还尝试在撰写文件中使用链接和用户定义的网络,但没有成功。
我已经包含了 docker-compose.yml
文件的要点以及我的请求的代码片段。非常感谢任何帮助!
最佳答案
正如原帖评论中所讨论的,这是一个 DNS 问题。配置 DNS 对于该项目的用例来说有点复杂,因此我通过使用环境变量来设置用于根据我是在开发环境还是生产环境中运行来调用 API 容器的 URL 来解决我的问题:
(process.env.REACT_APP_URL_ROOT || '/app')
我在本地运行时将 REACT_APP_URL_ROOT
设置为本地主机地址,并在构建和部署 React 应用程序时将 nginx 容器配置为代理到 /app
。
关于node.js - 无法让 Docker 容器相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573612/