
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
Это да