docker-compose: не удается подключиться к контейнеру memcached - PullRequest
0 голосов
/ 08 июня 2019

Я изучаю докер. я хочу добавить кеширование в моем приложении и, следовательно, использовать memcached. ниже мой docker-compose.yml файл

version: "3"
services:
 app:
   build: .
   volumes: 
    - .:/project 
   command: 'rails s -b 0.0.0.0 -p 3000' 
   container_name: 'test_rails'
   ports:
    - 3000:3000
   depends_on:
     - database
   links:
    - memcached  
 database:
  image: postgres:latest
  volumes:
    - ./data:/var/lib/postgresql/data
  environment:
    POSTGRES_USER: docker-user
    POSTGRES_PASSWORD: docker-password
    POSTGRES_DB: docker-db
 memcached:
  build:
   context: .
   dockerfile: Dockerfile.memcached
  command: 'tail -f /dev/null'

когда я пытаюсь подключиться к серверу memcached, который находится внутри memcached контейнера из app контейнера, используя код ниже

require 'dalli'
options = { :namespace => "app_v1", :compress => true }
dc = Dalli::Client.new('localhost:11211', options)

Тогда я получаю ошибку ниже

WARN -- : localhost:11211 failed (count: 0) Errno::EADDRNOTAVAIL: Cannot assign requested address - connect(2) for "localhost" port 11211
Dalli::RingError: No server available
    from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/ring.rb:46:in `server_for_key'
    from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/client.rb:367:in `perform'
    from /usr/local/bundle/gems/dalli-2.7.10/lib/dalli/client.rb:130:in `set'
    from (irb):4
    from /usr/local/bin/irb:11:in `<main>'

Может ли кто-нибудь помочь мне понять и решить эту проблему.

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Вы не можете получить доступ к одной службе Docker из другой службы, используя localhost, так как каждая служба имеет свой собственный IP-адрес и похожа на свою маленькую виртуальную машину.Используйте имя службы вместо localhost, и docker разрешит его с помощью IP-адресов целевой службы,

`dc = Dalli::Client.new('memcached:11211', options)`
1 голос
/ 08 июня 2019

Изменение:

dc = Dalli::Client.new('localhost:11211', options)

на:

dc = Dalli::Client.new('memcached:11211', options)

Когда вы настраиваете контейнеры из compose, они все подключаются к сети по умолчанию, созданной compose.memcached в этом случае является DNS-именем контейнера memcached и будет автоматически преобразовано в IP-адрес контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...