Docker: не удается подключиться к Redis при использовании docker run вместо docker-compose up - PullRequest
0 голосов
/ 20 сентября 2019

Я использую инструментальный пояс для докеров на Windows Home Edition.Я пытаюсь использовать Node с Redis с помощью docker-compose, он работает хорошо, когда я запускаю образ, используя docker-compose up (в той же директории с исходным кодом), но когда я пытаюсь запустить его, используя docker run -it myusername/myimage, мойПриложение Node не может подключиться к Redis.

throwing:

Error: Redis connection to redis-server:6379 failed - getaddrinfo ENOTFOUND redis-server
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26) {
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'redis-server'
}

, что я считаю, потому что мое приложение узла не может найти Redis, даже если приложение работает, когда я использую docker-compose up, я невозможность доступа к нему через соответствующий порт, т.е. localhost: 3000.

это мой docker-compose.yml

version: '3'
services:
  my_api:
    build: .  
    ports:
     - "3000:3000"
    image: my_username/myimage
    links: 
     - redis-server:redis-server 
  redis-server:
    image: "redis:alpine"

Есть две проблемы, с которыми я сталкиваюсь, и я считаю, что обаони взаимосвязаны.

РЕДАКТИРОВАТЬ

Может ли это быть из-за проблемы виртуализации Windows Home Edition?потому что он не использует Hyper V, я просто пробую свои силы в докере, поэтому я не знаю об этом много, но ответ Дэвида имеет большой смысл, что это может быть из-за различных сетей, и мне нужно подключиться к действительному мостуили около того.

вот что я получаю, когда делаю docker network ls

NETWORK ID          NAME                      DRIVER              SCOPE
5802daa117b1        bridge                    bridge              local
7329d018df1b        collect_api_mod_default   bridge              local
5491bfee5551        host                      host                local
be1353789426        none                      null                local

1 Ответ

1 голос
/ 21 сентября 2019

Когда вы запускаете весь стек в одном и том же файле docker-compose.yml, Compose автоматически создает сеть Docker для вас , и это заставляет работать межсервисные DNS-запросы.

Если вывы пытаетесь вручную docker run создать контейнер, и вы вообще не указываете опцию --net, вы получаете то, что Docker вызывает мостовая сеть по умолчанию , что явно менее полезно.Вы должны убедиться, что ваш контейнер подключен к той же внутренней Docker-сети, что и сервер Redis.

Вы можете запустить docker network ls, чтобы получить список сетей Docker;учитывая, что docker-compose.yml файл, вероятно, будет файл с именем вроде source_directory_default.Возьмите это имя и передайте его вашей команде docker run (перед именем изображения)

docker run --net source_directory_default -p 3000:3000 my_username/my_api
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...