twwlf
25.10.2017
14:26:56
спасибо
Евгений
25.10.2017
14:28:28
Artem
25.10.2017
14:29:15
тебе ошибка все разжевала
Евгений
25.10.2017
14:29:50
Google
Nklya
25.10.2017
14:33:58
Artem
25.10.2017
14:34:29
Евгений
25.10.2017
14:35:45
@Nklya @ArtG1uK я создаю сеть типа host и контейнерам указываю ipv4 статичные, правильно?
twwlf
25.10.2017
14:57:44
скорее всего, указывать ip тебе не нужно
Евгений
25.10.2017
15:00:53
не могу пока что найти никакого примера вообще, в том числе в доке
twwlf
25.10.2017
15:09:26
https://docs.docker.com/compose/compose-file/#network_mode
тут упоминание есть
HOST OR NONE
Use the host’s networking stack, or no networking. Equivalent to docker run —net=host or docker run —net=none. Only used if you use docker stack commands. If you use the docker-compose command, use network_mode instead.
Евгений
25.10.2017
15:18:45
да, несколько раз прочёл, ничего кроме
version: '2.1'
services:
node1:
image: cassandra:3.10
network_mode: host
ports:
- 10.0.7.2:9042:9042
придумать не смог, это так должно работать?
это весь docker-compose.yaml
сеть не создавал в докере, 10.0.7.2 просто один из интерфейсов хоста
twwlf
25.10.2017
15:21:21
порты тебе вообще указывать не надо, это не сработает
Google
twwlf
25.10.2017
15:21:48
при использовании хостовой сетки внутренний процесс контейнера сам начнёт слушать порт
согласно внутренним настройкам
по идее, на всех хостовых интерфейсах
Евгений
25.10.2017
15:22:25
да, так оно и есть, сейчас есть подключение по любому ip адресу
но у меня же несколько нод с одинаковыми портами, как назначить каждой конкретный ip ?
twwlf
25.10.2017
15:23:01
никак
либо разные образы, либо контейнерная сетка и разные порты снаружи
Евгений
25.10.2017
15:23:58
twwlf
25.10.2017
15:24:33
image
Евгений
25.10.2017
15:25:09
Не понял вообще как это поможет
twwlf
25.10.2017
15:25:17
короче
если ты хочешь в рамках одной тачки запустить два инстанса из одного и того же имаджа – юзай докеровую сетку
с разными внешними портами
Евгений
25.10.2017
15:26:07
А я понял, типо в image сделать разные порты
twwlf
25.10.2017
15:26:39
services:
node1:
image: cassandra:3.10
ports: 9042:9042
node2:
image: cassandra:3.10
ports: 9043:9042
Евгений
25.10.2017
15:26:56
Остаётся только вариант с другой машины попасть внутрь докерной сети?
twwlf
25.10.2017
15:28:43
не понял задачу
Евгений
25.10.2017
15:29:00
Всем привет,
Короткая версия вопроса:
Как сделать так, чтобы 2 контейнера общались между собой через тот же IP адрес и Порт, что и внешний клиент на другой машине.
те из container1 по 10.0.7.2:9042 я попадал в container2 (оба на host1)
и с host2 по 10.0.7.2:9042 я попадал в container2 (host1)
Зачем:
1. поднимаю Cassandra-кластер в докере и столкнулся с проблемой при подключении к ней внешнего клиента (на другой машине и НЕ в докере, эти условия поменять нет возможности)
2. У cassandra есть listen address, по умолчанию это 172.18.0.2 и 172.18.0.3(из compose) BROADCAST_ADDRESS - это тот ip по которому к ноде надо подключаться, те по-умолчанию такой же, на котором она слушается. CASSANDRA_SEEDS - то, к кому подключаемся, тут тоже используем 172 сеть
Чтобы подключиться из вне (см пункт 1) , поднимаем интерфейсы дополнительные (хочется использовать одинаковые порты) и маппим порты 172.18.0.2:9042 -> 10.0.7.2:9042, 172.18.0.3:9042 -> 10.0.7.3:9042
Пока всё кажется логичным, всё работает.
НО, когда подключается клиент к скажем к 10.0.7.2:9042, cassandra ему отвечает что есть ещё нода по адресу 172.18.0.3, клиент пытается туда тоже сходить и у него, разумеется, не получается.
Заставить говорить Cassandra что сосед это не 172.18.0.3, а 10.0.7.3 можно только используя его в конфигурации, но, тогда вообще ничего не заработает, потому что ИЗ node1 по адресу 10.0.7.3 в node2 НЕ попасть.
Как разрешить такой тупик?
Тип сети host решает задачу
Google
Евгений
25.10.2017
15:29:57
Но без отговорки что контейнеров больше чем 1
twwlf
25.10.2017
15:32:01
а что если listen_address == host ip addr?
будет много ната, но должно работать
вообще, когда ты запускаешь сервисы в compose, он собирает их в сетку с днс, и они становятся доступны по именам а-ля node1/node2 в моём примере
Евгений
25.10.2017
15:33:26
Да
Просто косяк что клиент то внешний
twwlf
25.10.2017
15:33:53
ну а какая разница
поэтому и адрес внешний
т.е. клиент придёт на внешний адрес хостовой тачки, дальше ядро занатит куда нужно
Евгений
25.10.2017
15:34:43
Да, это норм, клиент спрашивает у node1, а где node2, я туда тоже схожу
twwlf
25.10.2017
15:34:59
такой же внешний адрес, но другой порт
Евгений
25.10.2017
15:35:19
А она такая 172.16 (я так node2 зарезолвила) И клиент такой ну ок и идёт на 172.16
А на node1 он пошёл через 10.0.7 изначально, это он знал как идти)
Я разве не могу создать bridge так, чтобы с другой машины в его сеть попадать?
Это бы решило мою задачу
Всё получилось, спасибо, использовал создание bridge в compose (ip адреса при этом на самом хосте эти же не используются) + конструкцию expose вместо ports
Yuri
25.10.2017
18:37:58
Евгений, а можно получившийся файл выложить?
у самого прмерно такая же задача
Евгений
25.10.2017
18:41:32
Alexander
25.10.2017
20:57:09
а можно уже где-то посмотреть доклады с dockercon? в частности про kubernetes интересует. пока только фотки слайдов некоторых находил.
ImCat
25.10.2017
21:19:54
Добрый вечер, я новичек в работе с докером, пытаюсь сделать пулл windows server core но докер говорит мне image operatin system "windows" cannot be used on this platform, как решить ?
Google
twwlf
25.10.2017
21:22:06
Подумай
ImCat
25.10.2017
21:22:18
Думаю, ищу, спрашиваю.
twwlf
25.10.2017
21:22:25
Очевидно, что виндовый образ будет работать только в винде
ImCat
25.10.2017
21:22:34
да я это понял
twwlf
25.10.2017
21:22:37
Плохо думаешь, тебе система ответ прямым текстом написала
ImCat
25.10.2017
21:22:45
я из под винды
сижу
twwlf
25.10.2017
21:23:00
Неправильный докер поставил
ImCat
25.10.2017
21:23:38
Окей попробую другой
Alexander
25.10.2017
21:23:48
на windows надо ставить docker toolbox вроде, но работать будет только на professional версии, home не прокатит (нету поддержки hyper v).
ImCat
25.10.2017
21:24:07
Обидно, у меня 8 без хупер в
Есть какой нибудь способ обойти это без установки какой нибудь 10 про на внешний диск ?
twwlf
25.10.2017
21:25:58
ImCat
25.10.2017
21:26:16
asd
вот это грустная история
twwlf
25.10.2017
21:26:40
Ну, щас бы на старой винде посидеть, да
https://www.docker.com/docker-windows
Тут всё написано
Anton
25.10.2017
21:27:31
ImCat
25.10.2017
21:27:33
я проверил
C:\Users\>docker —version
Docker version 17.07.0-ce, build 8784753
C:\Users\>docker-compose —version
docker-compose version 1.15.0, build e12f3b94
C:\Users\>docker-machine —version
docker-machine version 0.12.2, build 9371605
Google
ImCat
25.10.2017
21:40:28
окей теперь странное, я запустил из под виндовсовской консольки настроел её и мне всравно написло что винда не подходит под винду, единственный выход накатить на внешний винду 10 про ?или есть какие то особые шаманские ритуалы?
twwlf
25.10.2017
21:42:16
Не странное
Ещё раз внимательно читай
ImCat
25.10.2017
21:42:28
Может я вообще не правильно подхожу к задаче? мне надо некое виндовсовское приложение упаковать в контейнер docker, правильно ли я понимаю, что мне надо создать контейнер с виндой и в него закопипастить приложение
Anton
25.10.2017
21:45:07
Vlad
25.10.2017
21:45:14
Что-бы не городить hyper-v можно сразу поставить windows 2016 core и сделать всё там
ImCat
25.10.2017
21:47:00
Окей так и сделаю
Bogdan (SirEdvin)
26.10.2017
06:18:18
Вернее, то можно, но очень не стоит так делать. Потому что из-за этого она начинает обрастать костылями и все приводит к печальным последствиям
Alexey
26.10.2017
06:19:41
Bogdan (SirEdvin)
26.10.2017
06:20:13
Это да