在多容器 docker-compose 设置中,我应该添加什么作为 api 地址?

sam*_*123 1 docker docker-compose angular

我有一个简单的 2 个容器 docker-compose 设置。一个前端(Angular)和一个后端(nestjs/express)。

这是我的 docker-compose(开发)

version: "3.3"
services:
  db:
    image: 'postgres:10-alpine'
    container_name: 'postgresnew'
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=4321
      - POSTGRES_DB=bleh
    volumes:
      - pgdata:/var/lib/postgresql/data
  frontend:
    build: ./frontendapp
    ports:
      - 4001:4200
    volumes: 
      - ./frontendapp:/app
      - /app/node_modules/
  backend: 
    build: ./backendapp
    ports: 
      - 4000:8080
    volumes:
      - ./backendapp:/app
      - /app/node_modules/
    env_file:
      - .env
volumes: 
  pgdata:
Run Code Online (Sandbox Code Playgroud)

现在,暴露了正确的端口后,我的前端可以使用 localhost:4000 地址轻松访问后端,如我的前端环境中所见

const x = 'http://localhost:4000';

export const environment = {
  production: false,
  API_USERSERVICE: x + "/api/user",
  API_PROJECTSERVICE: x + "/api/project",
  API_TASKSERVICE: x + "/api/task",
  API_PGROUPSERVICE: x + "/api/pgroup",
  API_KPISERVICE: x + "/api/kpi",
  API_FUNDRAISINGSERVICE: x + "/api/fundraising"

}; 

Run Code Online (Sandbox Code Playgroud)

但我希望它使用 docker 的内部桥接网络进行连接;而不是localhost:4000, 我不确定用什么作为它的地址......我试过const x = 'http://twrapp_backend_1'它的名字,但我得到了一个 CORS 错误,另外,它似乎试图访问一个叫这个名字的网站.. . 我也尝试const x = 'twrapp_backend_1'过......我用谷歌搜索了一个星期,不确定我是在 docker 端还是在 angular 端犯了错误。帮助!

Nar*_*rro 6

不,您不能通过 docker 的内部桥接网络请求您的后端服务。因为您对后端服务的请求是由不在 docker 内部桥接网络中的浏览器调用的。
在此处输入图片说明
只有Docker containers矩形中的容器才能使用容器的名称相互调用。