2016-08-13 3 views
0

Im портирует мое приложение rails с моей локальной машины в контейнер докеров и сталкивается с проблемой elasticsearch/searchkick. Я могу заставить его работать временно, но мне интересно, есть ли лучший способ. Таким образом, порт для elasticsearch не совпадает с локальным хостом по умолчанию: 9200, который использует searchkick. Теперь я использовал «докер-инспектор» в контейнере elasticsearch и получил фактический IP-адрес, а затем установил переменную ENV ['ELASTICSEARCH_URL'], как говорится в файлах searchkick docs, и это работает. Проблема с Im заключается в том, что это боль, если я перезапускаю/изменяю контейнеры, которые меняют IP, и мне нужно снова пройти весь процесс. Вот мой докер-compose.yml:Приложение Docker Rails с searchkick/elasticsearch

version: '2' 
services: 
    web: 
    build: . 
    command: rails server -p 3000 -b '0.0.0.0' 
    volumes: 
     - .:/living-recipe 
    ports: 
     - '3000:3000' 
    env_file: 
     - .env 
    depends_on: 
     - postgres 
     - elasticsearch 

    postgres: 
    image: postgres 

    elasticsearch: 
    image: elasticsearch 

ответ

3

использование elasticsearch:9200. docker compose выставляет контейнер через его имя.

+0

Проделал большое спасибо – DRing

+0

, если это сработало, вы должны принять ответ, не так ли? – phoet

+0

Извините, нажал на голосование вместо ответа на принятие – DRing

0

Вы не хотите пытаться сопоставить IP-адрес для elasticsearch вручную, так как он изменится.

Внесите depends_on за links. Это создаст такую ​​же зависимость, но также позволит получить контейнеры через имя службы.

Контейнеры для связанной услуги будут доступны по имени хоста, идентичному псевдониму, или имени службы, если не было указано псевдоним.

Ссылки также выражают зависимость между службами так же, как depends_on, поэтому они определяют порядок запуска службы.

Docker Compose File Reference - Links

Тогда в вашем приложении рельсы, где вы устанавливаете ENV['ELASTICSEARCH_URL'], используйте elasticsearch вместо этого.