2016-02-25 2 views
2

Я пытаюсь связать сервер memcache и сервер mongo с моим веб-сервером, но у меня есть локальный хост как имя хоста для всех. Поэтому я хочу связать их как localhost.Связывание нескольких контейнеров докеров в одном контейнере с псевдонимом localhost с использованием docker-compose

Я делаю this-

webserver: 
    build: ./webserver 
ports: 
    - "127.0.0.1:80:80" 
volumes: 
    - /var/www/html:/var/www/html 
links: 
    - memcachedserver:localhost 
    - mongoserver:localhost 

, но после того, как попасть в веб-сервер

docker exec -it acb51XXXX081 bash 

и

cat /etc/hosts 

Я получаю this-

127.0.0.1  localhost 
::1  localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.2  adocker_memcachedserver_1 4a11d0cb3126 
172.17.0.2  localhost 4a11d0cb3126 adocker_memcachedserver_1 
172.17.0.2  memcachedserver_1 4a11d0cb3126 adocker_memcachedserver_1 
172.17.0.3  adocker_mongoserver_1 a505d8de4736 
172.17.0.3  mongoserver_1 a505d8de4736 adocker_mongoserver_1 

Только сервер memcache получает псевдоним localhost, а не сервер mongo.

После того, как я вручную добавил localhost к записи mongo, он начал работать отлично.

172.17.0.3  localhost adocker_mongoserver_1 a505d8de4736 

Но я хочу сделать это автоматически в Докер-compose.yml файл

Любые идеи?

+0

Я не уверен, что вы можете использовать один и тот же псевдоним, чтобы ссылаться на 2 разных контейнера. – OttavioMonzione

+0

Тогда вы можете порекомендовать любой способ достичь того, что у меня есть? – xRahul

ответ

1

Вы не можете указать одно и то же имя для двух разных хостов. Вы действительно должны изменить свой код - hardcoding localhost, поскольку имя хоста для разных сервисов - плохая идея. (Лучше иметь разные имена хостов для каждой службы. Если они на самом деле выполняются на одном и том же хосте, вы можете указать имена этих хостов, чтобы указать на него.)

Если вы действительно не можете изменить свой код , вы можете настроить туннели от фактического localhost к контейнерам, на которых размещаются сервисы.

+0

Привет, Dag! Я знаю, что настройка одинакового псевдонима для разных контейнеров - плохая идея, так как это не просто имя хоста, в котором они работают. Я попробую использовать «net:' dnephin. Можете ли вы подробно рассказать о методе туннелей, о котором вы говорили? – xRahul

+0

Чтобы настроить туннели, вы можете, например, использовать функцию туннеля 'ssh'. –

3

Как уже сообщалось, вы не можете использовать один и тот же псевдоним дважды. Вместо этого вы можете использовать net:webserver в других сервисах (в v2 это будет network_mode:webserver).

Таким образом, все контейнеры будут совместно использовать один и тот же сетевой стек, а localhost будет работать.

+0

Спасибо! Я обязательно попробую это скоро. Я должен скоро создать кластер Kafka через докер, и было бы очень полезно, если бы я смог получить их всех в одной сети. – xRahul

+0

Синтаксис для версии 2 - «network_mode: service: webserver» –

Смежные вопросы