Моя проблема сводится к следующему: у меня есть две службы в 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.internal
(и gateway.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