Docker-создание сетей с помощью Traefik - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь развернуть три службы с docker-compose и Traefik:

version: '3.5'

services:

  reverse-proxy:
    image: traefik
    command: --web --docker --logLevel=INFO
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.frontend.rule=Host:traefik.localhost"
      - "traefik.port=8080"

  db:
    build: ./db
    environment:
      - MONGO_INITDB_DATABASE=example
    volumes:
      - ./volumes/db:/data/db
    restart: always
    labels:
      - "traefik.enable=false"

  api:
    build: ./api
    environment:
      - DATABASE_CLIENT=mongo
      - DATABASE_HOST=db
      - DATABASE_PORT=27017
      - DATABASE_NAME=example
      - HOST=localhost
    expose:
      - "1337"
    depends_on:
      - db
    restart: always
    labels:
      - "traefik.frontend.rule=Host:api.localhost"

  website:
    build: ./app
    labels:
      - "traefik.frontend.rule=Host:web.localhost"

Последний контейнер (website) - это статическая сборка веб-сайта с create-react-app, которая использует API (api):

let response = await fetch(`http://api:1337/news`);

Проблема в том, что веб-сайт не может разрешить хост http://api:1337 (т.е. по имени контейнера), но если я изменю эту строку на:

let response = await fetch(`http://<container-ip>:1337/news`);

Все отлично работает.Я попытался настроить сеть, и она тоже не работает.Любая помощь?Спасибо!

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете получить доступ к контейнерам с их именами только из других контейнеров.Если вы измените свой код реакции на:

let response = await fetch('http://localhost:8080/news', {
  headers: 'Host': 'api.localhost'
})

Вы сможете получить доступ к своему контейнеру

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...