#networking #docker-compose
#сеть #docker-compose
Вопрос:
У меня есть следующий docker-compose.yml, но мне нужно смоделировать разделение общедоступной / частной сети, где экземпляр Redis должен быть доступен только для localhost.
version: "2.2" # for compatibility, I can upgrade if needed
services:
nginx:
image: nginx
ports:
- 8080:80
redis:
image: redis
ports:
- 6379:6379
Это кажется простым, если мне нужно было ограничить его доступностью только в сети docker. Рассмотрим:
version: "2.2"
services:
nginx:
image: nginx
ports:
- 8080:80
networks:
- frontend
- backend
redis:
image: redis
ports:
- 6379:6379
networks:
- backend
networks:
frontend: {}
backend:
internal: true
Однако наши локальные веб-разработчики должны иметь возможность доступа к этому экземпляру Redis со своего хост-компьютера (за пределами сети docker) при локальной сборке, запуске и отладке.
Комментарии:
1. Вы имеете в виду «некоторые добровольцы будут запускать контейнерные redis на своей машине, а другие члены команды смогут получить доступ к этому redis ?!». Это правильно?
2. «Другие члены команды смогут получить доступ к этому Redis» — это сценарий, которого мы хотим избежать. Желаемое состояние заключается в том, что каждый разработчик запускает свой собственный стек (здесь опущено еще много частей), но не может подключиться к бэкэндам других разработчиков.
3. Я дам вам вкусный ответ
4. Проверьте ответ ниже @AdamSmith . Удачи!
Ответ №1:
Просто привяжите сервисный порт redis к localhost (127.0.0.1). Попробуйте следующее…
...
redis:
image: redis
ports:
- 127.0.0.1:6379:6379
...
Комментарии:
1. Это настолько тривиально, что я упустил это из виду. Спасибо вам за простое и понятное решение!
2. 🙂 Хорошо для тебя ~
Ответ №2:
- Запустите веб-интерфейс Redis под названием redis-commander.
- Используйте переменные среды, чтобы указать на запущенный redis.
- Предоставьте доступ к этому новому контейнеру и получите к нему доступ вместо того, чтобы предоставлять доступ к контейнеру Redis.
services:
redis:
# Do comment ports! no need to expose it
# ports:
# - 6379:6379
// ....
redis-commander:
image: rediscommander/redis-commander:latest
restart: unless-stopped
environment:
REDIS_HOST: redis:6379 # <-- 🔴 Here you point to your redis
# REDIS_PASSWORD # <- in case redis is protected with password
ports:
- "8081:8081"
Пусть ваши разработчики перейдут к http://localhost:8081 и наслаждайтесь.