连接Docker容器:前端通过同一主机上的Docker Compose连接到GraphQL后端
假设我在主机上,docker compose运行2个容器/服务:连接Docker容器:前端通过同一主机上的Docker Compose连接到GraphQL后端,docker,docker-compose,graphql,Docker,Docker Compose,Graphql,假设我在主机上,docker compose运行2个容器/服务: 后端graphql(端口:8000:8000) 前端反应(端口:8081:8081) 在我的react+apollo代码所在的前端容器中,我需要设置以下常量: // frontend container code export const APOLLO = { uri: 'http://0.0.0.0:8000/graphql' // << not working, what to use here? };
- 后端graphql(端口:8000:8000)
- 前端反应(端口:8081:8081)
// frontend container code
export const APOLLO = {
uri: 'http://0.0.0.0:8000/graphql' // << not working, what to use here?
};
//前端容器代码
导出常量阿波罗={
uri:'http://0.0.0.0:8000/graphql“//通过在本地运行服务器(而不是Docker)修复了此问题,发现后端拒绝前端条目,因为未设置CORS标头。将前端的ip列为白名单,并且它正常工作。使用后端ip在Docker容器中再次测试http://172.18.0.5/graphql
连接非常完美
希望这有帮助
编辑:在url主机名中引用容器名称,即http://backend/graphql由于docker compose设置了docker网桥,因此也能正常工作。这是一个比硬编码上述docker容器ip更好的解决方案。这是一个在节点获取无法访问协议时出现的问题或主机名
if(!parsedURL.protocol | | |!parsedURL.hostname){
抛出新类型错误(“仅支持绝对URL”);
}
根据graphql后端处理查询的方式,最好注销每个服务端点的URL,并确保URL包含主机和协议,否则获取将失败
对于我自己来说,当我的主机变量作为未定义的添加docker compose.yml
、docker版本、主机操作系统和任何支持的外部文件从我的服务端点的ENV返回时,就发生了这个错误,这样我们就可以复制。