Хост-локальные сети в Docker Compose

#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 и наслаждайтесь.

Найдите более подробную информацию об этом образе