Подтвердить что ты не робот

Связи между контейнерами, не работающими с док-станцией версии 2

Связывание контейнеров в файле docker-compose версии 2 не работает.

Только при использовании "старой" версии 1, я вижу ссылку в /etc/hosts контейнера.

У меня есть следующий файл docker-compose.yml версии 2.

version: '2'

services:
  my-app:
    image: tomcat:8.0
    container_name: my-app1
    links:
      - my-redis
  my-redis:
    image: redis
    container_name: my-redis1

Когда я запускаю следующую команду:

docker-compose up -d

Я вижу, что запускаются два контейнера, но не создается ссылка в файле /etc/hosts:

docker exec -it my-app1 cat /etc/hosts
    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.18.0.3      2abb84ccada9

Из "my-app1" я могу выполнить ping другой контейнер, используя IP-адрес "my-redis1", но я не могу "ping my-redis1" (на основе имени).

В чем может быть проблема?

Дополнительная информация:

  • Docker version 1.10.0, build 590d5108
  • docker-compose version 1.6.0, build d99cad6
  • Ядро Linux: 4.3.5-300.fc23.x86_64
4b9b3361

Ответ 1

Проблема заключается в firewalld моего хоста Fedora.

При временном отключении брандмауэра ('systemctl stop firewalld', за которым следует "перезагрузка docker systemctl" ), все работает в соответствии с документацией докера.

Кажется, существует большая проблема с firewalld при использовании с докером, см. https://github.com/docker/docker/issues/16137.

Обратите внимание, что RHEL/Centos 7 также использует firewalld.

-Arjen

Ответ 2

С версией 2 docker-compose "сервисы" (контейнеры), которые находятся в одной сети, связаны между собой по умолчанию.

Используя следующий файл docker-compose.yml

version: '2'

services:
  my-app:
    image: tomcat:8.0
    container_name: my-app1
    links:
      - my-redis
  my-redis:
    image: redis
    container_name: my-redis1

Вы можете выполнить ping my-app из контейнера my-redis и ping my-redis из своего контейнера my-app, чтобы проверить, что они связаны.

Например:

$ docker-compose up -d
$ docker exec -it my-app1 bash
# ping my-redis

Более подробную информацию об этом можно найти по ссылкам ниже: https://blog.docker.com/2016/02/compose-1-6/ https://github.com/docker/compose/blob/master/docs/networking.md