Доступ к redis локально на Docker - docker compose - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть два контейнера, redis и web. Я пытаюсь получить доступ к контейнеру Redis из Интернета. Ничего не работает Ниже находится мой докер составьте файл

version: '3.7'
services:
  redis:
    image: redis:alpine
    restart: always
    ports:
      - "6379"
    volumes:
      - /private/var/www/redis:/var/www/redis
    network_mode: host
  web:
    build:
      context: web
      dockerfile: Dockerfile
    depends_on:
      - redis
    ports:
      - "127.0.0.1:80:80"
      - "127.0.0.1:443:443"
      - "127.0.0.1:22:22"
    volumes:
      - /private/var/www/:/var/www/
    networks:
      - docker_web_network

networks:
  docker_web_network:
    driver: bridge
    ipam:
      driver: default
      config:
         - subnet: 162.18.1.0/16

Когда я запускаю redis-cli в веб-контейнере, я получаю Could not connect to Redis at 127.0.0.1:6379: Connection refused.

Контейнеры Docker

Vs-MacBook-Pro:docker vn$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                NAMES
36ca1b626a68        docker_web          "/bin/sh -c '/usr/sb…"   2 hours ago         Up 2 hours          127.0.0.1:22->22/tcp, 127.0.0.1:80->80/tcp, 127.0.0.1:443->443/tcp   docker_web_1
d6191f39385a        redis:alpine        "docker-entrypoint.s…"   2 hours ago         Up 2 hours                                                                               docker_redis_1

redis cli

root@36ca1b626a68:/var/www# redis-cli -h docker_redis_1 ping
Could not connect to Redis at docker_redis_1:6379: Name or service not known

1 Ответ

0 голосов
/ 09 сентября 2018

Использование localhost в Docker-контейнере недопустимо, так как localhost означает для контейнера собственный контейнер, поэтому, если вы запускаете redis-cli из веб-контейнера, redis-cli пытается найти redis в веб-контейнере вместо контейнера redis.

Вам нужно указать имя службы redis - docker (точнее, сеть docker-compose) будет преобразовывать для вас имя службы в IP-адрес контейнера redis, поэтому вы должны использовать:

redis-cli -h redis ping

ожидаемый результат:

PONG

Edit:

Этот ответ будет работать только в том случае, если обе службы используют один и тот же сетевой режим, поэтому существует два способа:

  1. Добавьте network_mode: хост к веб-сервису, и тогда "localhost" для redis будет в порядке
  2. Удалить network_mode: хост из redis, и тогда домен "redis" будет в порядке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...