Как получить адрес Redis из Docker Compose? - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь передать URL-адрес redis в контейнер докера, но пока не могу заставить его работать. Я провел небольшое исследование, и ни один из ответов не помог мне.

version: '3.2'
services:
  redis:
    image: 'bitnami/redis:latest'
    container_name: redis
    hostname: redis
    expose:
      - 6379
    links:
      - api
  api:
    image: tufanmeric/api:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - proxy
    environment:
      - REDIS_URL=redis
    depends_on:
      - redis
    deploy:
      mode: global
      labels:
        - 'traefik.port=3002'
        - 'traefik.frontend.rule=PathPrefix:/'
        - 'traefik.frontend.rule=Host:api.example.com'
        - 'traefik.docker.network=proxy'

networks:
  proxy:

Ошибка: сбой подключения Redis к Redis - подключите ENOENT redis

1 Ответ

2 голосов
/ 30 марта 2019

Вы можете общаться только между контейнерами в одной сети Docker.Docker Compose создает сеть default для вас, и при отсутствии какой-либо конкретной декларации ваш контейнер redis находится в этой сети.Но вы также объявляете отдельную сеть proxy и присоединяете контейнер api к этой другой сети.

Единственное простейшее решение - удалить все блоки network: везде и просто использоватьdefault сеть Docker Compose создаст для вас.Вам может потребоваться отформатировать переменную REDIS_URL как фактический URL-адрес, например, redis://redis:6379.

Если у вас нетехническое требование иметь отдельные сети, добавьте - default в список сетей дляapi контейнер.

В вашем docker-compose.yml есть ряд других настроек, которые не особенно полезны.expose: почти ничего не делает и обычно также предоставляется в Dockerfile.links: - это устаревший способ совершать кросс-контейнерные вызовы, и, как вы заявили, он может совершать вызовы Redis на ваш сервер API.hostname: не действует вне самого контейнера и обычно совершенно не нужен.container_name: имеет некоторые видимые эффекты, но обычно имя контейнера Docker Compose просто подходит.

Это оставит вас с:

version: '3.2'
services:
  redis:
    image: 'bitnami/redis:latest'
  api:
    image: tufanmeric/api:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - REDIS_URL=redis://redis:6379
    depends_on:
      - redis
    deploy:
      mode: global
      labels:
        - 'traefik.port=3002'
        - 'traefik.frontend.rule=PathPrefix:/'
        - 'traefik.frontend.rule=Host:api.example.com'
        - 'traefik.docker.network=default'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...