С помощью docker compose, как мне получить доступ к сервису внутри и снаружи по одному и тому же адресу? - PullRequest
1 голос
/ 10 июля 2019

Моя проблема сводится к следующему: у меня есть две службы в docker compose: app и storage. Я ищу способ доступа к службе storage (порт 9000) из приложения и извне, используя тот же адрес .

app - приложение Django, использующее хранилища django с бэкэндом S3. storage - сервер minio (совместимый с S3, используется только для разработки).

С app я могу получить доступ к storage, используя http://storage:9000. С внешнего докера, я могу получить доступ к storage по http://localhost:9000, или http://0.0.0.0:9000, или даже по http://192.168.xxx.yyy (с использованием другого устройства в сети). Там нет сюрпризов.

Однако, когда генерируется URL-адрес, я не знаю, будет ли он использоваться для внутреннего или внешнего использования (или для того и другого).

докер-compose.yml

services:

  app:
    build: backend/
    ports:
      - "8000:8000"
    volumes:
      - ./backend/src:/app/src
    command: /usr/local/bin/python src/manage.py runserver 0.0.0.0:8000

  storage:
    image: minio/minio:RELEASE.2019-06-19T18-24-42Z
    volumes:
      - storage:/data
    environment:
      MINIO_ACCESS_KEY: "DevelopmentAccessKey"
      MINIO_SECRET_KEY: "DevelopmentSecretKey"
    ports:
      - "9000:9000"
    command: minio server /data

volumes:
  storage:

Я рассмотрел вопрос об изменении серверной части для получения URL-адресов конечных точек в зависимости от контекста, но это далеко не тривиально (и будет только для разработки, при производстве используется внешнее хранилище S3, я хотел бы, чтобы они были как можно более похожими) .

Я играл с сетевыми настройками docker-compose, но я не могу заставить это работать.

Есть мысли о том, как подойти к этому в docker-compose?

Дополнительная информация:

Я играл с host.docker.internalgateway.docker.internal), но безрезультатно. host.docker.internal разрешается в 192.168.65.2, я могу получить доступ к storage из app с этим ip, но из браузера 192.168.65.2:9000 дает тайм-аут.

Но похоже, что при использовании моих компьютеров внешний ip работает. Если я использую 192.168.3.177:9000, я могу получить доступ к storage как с app, так и с браузера и даже с внешних устройств (идеально!). Однако этот ip не является фиксированным и, очевидно, не совпадает с моими коллегами, поэтому, похоже, все, что мне нужно, это способ динамически назначать его при выполнении docker-compose up

...