node.js - 无法让 Docker 容器相互通信

标签 node.js reactjs docker docker-compose unirest

我有两个 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 文件的要点以及我的请求的代码片段。非常感谢任何帮助!

docker-compose.yml
Unirest request to /logi

最佳答案

正如原帖评论中所讨论的,这是一个 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/

相关文章:

node.js - npm coffescript安装错误

node.js - ENOENT 在 Express Endpoint 上没有用于 readFileSync 的此类文件

maven - 高级Docker和Dockerfile的卷/写出理解

node.js - 在nodejs中替换文件中所有出现的字符串的简单方法

node.js - nodejs - 我应该如何将 nginx 与 pm2 一起用于我在集群模式下运行的应用程序?

javascript - React Native TextInput 显示后不会聚焦

javascript - 使用 Material UI 和 React.js 创建具有左对齐和右对齐元素的工具栏

reactjs - 在 IIS 中 react js 服务器端渲染和托管

azure - 从 Docker 容器内的 AzureKeyVault 获取 secret 和证书

tomcat - 运行 tomcat 的 Docker 容器 - 无法使用主机 IP 地址访问服务器