如何通过反应访问链接的docker容器的主机

时间:2017-01-29 13:19:41

标签: reactjs docker docker-compose

我的应用程序有三个容器:db,frontend-web(React),backend-api 如何在frontend-web

中获取我的后端api地址

这是我的撰写文件

version: '2'
services:
  db:
    image: postgres
  ports:
    - "5432:5432"

  web:
    build: .
    stdin_open: true
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000"
    environment:
      - API_URL=http://api:8080/
    links:
      - api
    depends_on:
      - api

  api:
    build: ./api
    stdin_open: true
    volumes:
      - ./api:/usr/src/app
    ports:
      - "8080:3000"
    links:
      - db
    depends_on:
      - db

我无法获取api和process.env.API_URL

的地址

2 个答案:

答案 0 :(得分:0)

将容器名称添加到服务描述中,如下所示:

api:
    build: ./api
    container_name: api
    stdin_open: true
    volumes:
      - ./api:/usr/src/app
    ports:
      - "8080:3000"
    links:
      - db
    depends_on:
      - db

然后,您可以使用容器名称作为主机名进行连接。见https://docs.docker.com/compose/compose-file/#/containername

答案 1 :(得分:0)

我承认web容器中的服务器只提供静态htmls而不是api容器服务器的代理。

因此,一旦将端口映射到主机,就可以使用主机名称/ ip来查找api服务器。

如果您的主机名称为app.myserver.dev,则可以在API_URL env var中使用下面的配置,docker将为您完成工作:

  web:
    build: .
    stdin_open: true
    volumes:
      - .:/usr/src/app
    ports:
      - "3000:3000"
    environment:
      - API_URL=http://app.myserver.dev:8080/
    links:
      - api
    depends_on:
      - api