Nginx 将docker compose容器中的API调用到另一个容器
我正在使用docker compose环境创建一个web服务。但我面临着调用API的问题。我正在使用nextjs,下面是我的代码Nginx 将docker compose容器中的API调用到另一个容器,nginx,docker-compose,next.js,Nginx,Docker Compose,Next.js,我正在使用docker compose环境创建一个web服务。但我面临着调用API的问题。我正在使用nextjs,下面是我的代码 从“下一步”导入{GetServerSideProps}; 导出默认函数Home(){ 返回( ... ); } 导出常量getServerSideProps:getServerSideProps=async({req})=>{ 取('http://localhost:7070/api/users')//r.json() .然后((结果)=>console.log('
从“下一步”导入{GetServerSideProps};
导出默认函数Home(){
返回(
...
);
}
导出常量getServerSideProps:getServerSideProps=async({req})=>{
取('http://localhost:7070/api/users')//r.json()
.然后((结果)=>console.log(';
返回{
道具:{},
};
};
这是示例代码。当我访问此页面时,出现以下错误
/app/node_modules/node-fetch/lib/index.js:1461
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
^
FetchError: request to http://localhost:7070/api/users failed, reason: connect ECONNREFUSED 127.0.0.1:7070
如何调用fetchapi?
我的docker设置如下
docker compose
版本:“3”
服务:
servicebackend:
容器名称:seiu
建造:
dockerfile:dockerfile.dev
上下文:./services/server
卷数:
-/app/node\u模块
-/服务/服务器:/app
服务前端:
集装箱名称:seiwhale前端
建造:
dockerfile:dockerfile.dev
上下文:./services/webapp
卷数:
-/app/node\u模块
-/服务/webapp:/app
serviceredis:
集装箱名称:seiwhale redis
图片:“redis”
nginx:
集装箱名称:Seinginx
重新启动:始终
建造:
dockerfile:dockerfile
上下文:./services/nginx
端口:
- "7070:80"
nginx
此外,当发生错误时,前端容器将自动退出,如下所示
seiwhale-frontend exited with code 1
退出后如何重新运行前端容器?2个错误:
- 您缺少
配置中的密钥,在该配置中,您定义了要向同一docker网络中的其他服务公开的端口列表(或者在本例中,是在同一docker compose文件中定义的服务)docker compose.yml
- 前端代码作为docker服务运行,而不是从主机运行,因此您需要再次使用
和notexpose
。(port
用于映射来自port
的端口,因此docker网络之外的应用程序可以调用它,例如,如果有什么东西正在侦听HOST:CONTAINER
的端口servicebackend
,并且您定义了4200
,那么它可以在主机上访问8000:4200
)localhost:8000
docker compose.yml
版本:“3”
服务:
servicebackend:
容器名称:seiu
建造:
dockerfile:dockerfile.dev
上下文:./services/server
卷数:
-/app/node\u模块
-/服务/服务器:/app
揭露:
- "3000"
服务前端:
集装箱名称:seiwhale前端
建造:
dockerfile:dockerfile.dev
上下文:./services/webapp
卷数:
-/app/node\u模块
-/服务/webapp:/app
揭露:
- "8080"
serviceredis:
集装箱名称:seiwhale redis
图片:“redis”
nginx:
集装箱名称:Seinginx
重新启动:始终
建造:
dockerfile:dockerfile
上下文:./services/nginx
端口:
- "7070:80"
揭露:
- "80"
在前端
export const getServerSideProps:getServerSideProps=async({req})=>{
取('http://localhost:80/api/users')//r.json()
.然后((结果)=>console.log(';
.error((err)=>console.error(err))
返回{
道具:{},
};
};
I已更改fetch('http://localhost:80/api/users)
tofetch('http://servicebackend:3000/api/users)
而且它很有效!谢谢
seiwhale-frontend exited with code 1