Nginx 将docker compose容器中的API调用到另一个容器

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('

我正在使用docker compose环境创建一个web服务。但我面临着调用API的问题。我正在使用nextjs,下面是我的代码

从“下一步”导入{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 compose.yml
    配置中的密钥,在该配置中,您定义了要向同一docker网络中的其他服务公开的端口列表(或者在本例中,是在同一docker compose文件中定义的服务)
  • 前端代码作为docker服务运行,而不是从主机运行,因此您需要再次使用
    expose
    和not
    port
    。(
    port
    用于映射来自
    HOST:CONTAINER
    的端口,因此docker网络之外的应用程序可以调用它,例如,如果有什么东西正在侦听
    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)
to
fetch('http://servicebackend:3000/api/users)
而且它很有效!谢谢
seiwhale-frontend exited with code 1