

Никита
01.03.2017
14:32:00
Привет!
Есть такой вопрос:
раньше был сервер, на который деплоились 5 докер-контейнеров с --network=host. все они нужны для приложения и общаются между собой
нужно деплоить несколько таких приложений на сервер (разные ветки того же приложения с гитхаба)
я создаю network с названием ветки
при запуске контейнеров указываю в —network название этой сети
на самой машине у меня стоит nginx, которым я хочу разрулить запросы к разным приложениям
где мне взять ip сети, чтобы я по нему смог достучатсья по разным портам к разным контейнерам?
nginx conf template:
upstream u1 {
server {{ branch_ip }}:7000;
}
upstream u2 {
server {{ branch_ip }}:7010;
}
upstream u3 {
server {{ branch_ip }}:7080;
}
upstream u4 {
server {{ branch_ip }}:7082;
}
docker network inspect:
"Name": "test1",
"Id": "539a01316874c86c32c234d430a1c057a46f01846948552527c3f609d443bb77",
"Created": "2017-03-01T14:21:06.410200207Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Containers": {
"07718eff31f71c6d250ad9ecb5fb2c24e8a857a112b05a2d76a495d2430df244": {
"Name": "test1-rsyslog",
"EndpointID": "b471b66ef04ab3a02d809b723569a84c2a6d41230a9efbb796cafce5efab5296",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
}, ......
upd: я понимаю, что могу узнавать ip каждого контейнера из его eth0
и про docker swarm читал, но показалось, что для одного хоста можно обойтись без него (могу быть неправ)


Anatoly
01.03.2017
14:58:08
любой k:v в который ты сможешь писать из приложения в доккере о его ip адрессе а потом читать из nginx тебе подойдет.

Evgeny
01.03.2017
14:58:48

Google

Anatoly
01.03.2017
14:59:28

Evgeny
01.03.2017
14:59:58
Я себе под это сделал свой резолвер в докере, а нгинкс в него стучится
Короче - послушать бы топикстартера

Anatoly
01.03.2017
15:00:51
ну мне видится решение с резолвером самым адекватным путем, если честно

Никита
01.03.2017
15:32:17
ну не руками конечно, я настраиваю Ansible развертку...
Думал про это все, но есть ощущение что есть проще способ, нативный
Спасибо все равно, буду думать)

Evgeny
01.03.2017
15:33:14
Если всё в рамках одного хоста - можно снаружи биндиться на один IP

Anatoly
01.03.2017
15:35:35

Никита
01.03.2017
15:37:58
Ну да, но тут появляется заморочка с избежанием повторного bind на туже сеть
Пока кажется что решений много но у всех свои костыли

Alex
01.03.2017
15:46:23
Народ, может кто подсказать, есть такой пример подключения nfs тома
docker service create \
--mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"'
--name myservice \
<IMAGE>
https://docs.docker.com/engine/swarm/services/
Как эти параметры правильно транлировать в compose v.3

Anatoly
01.03.2017
15:54:38
Народ, может кто подсказать, есть такой пример подключения nfs тома
docker service create \
--mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"'
--name myservice \
<IMAGE>
https://docs.docker.com/engine/swarm/services/
Как эти параметры правильно транлировать в compose v.3
в компоуз не завезли правильный сворм

Alex
01.03.2017
16:07:23
в компоуз не завезли правильный сворм
так работает с 3й версией: docker deploy —compose-file docker-compose.yml blablabla
тут пример есть http://blog.terranillius.com/post/composev3_swarm/
Ну в смысле, что docker-compose нет, но docker принимает чутка измененные файлы композа

Ivan
02.03.2017
05:53:45
А как бы мне передать переменную окружения в докер так, что бы использовать её внутри в nginx.conf.
Я хочу параметр для listen передавать через -e при создании. Возможно это?

Google

Никита
02.03.2017
05:59:27

Ivan
02.03.2017
06:00:18
Да, мне после запуска. Вопрос наверное больше про nginx, может сталкивались, может ли он переменную юзать в своём конфиге

Никита
02.03.2017
06:02:16

Ivan
02.03.2017
06:03:00
ну т.е. делаем обертку, и правим конфиг, так ведь?
run_ngix.sh типа?

Никита
02.03.2017
06:03:33
Тогда уж проще docker inspect
крутяк
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps | grep ${container_name} | awk '{print $1}')

Ivan
02.03.2017
06:04:21
Спасибо

Никита
02.03.2017
06:09:22
Спасибо
сам как раз сейчас чем-то похожим занимаюсь )

Semyon
02.03.2017
06:55:14
это в gettext такая пепяка есть
(кажется в gettext)

Ivan
02.03.2017
06:56:35
gettext пакет да:?

Semyon
02.03.2017
07:05:46
ага

Алексей
02.03.2017
09:48:01
парни а что означает в
Version: 17.03.0-ce
букавки ce ?

Aleksey
02.03.2017
09:49:52
ну обычно это community edition

Алексей
02.03.2017
09:50:02
да да
если это так
то где же не камунити :) ?
есть чо почитать ?

Google

Aleksey
02.03.2017
09:50:31
а что за приложение, это версия чего?
ну еще ee бывает ))

Алексей
02.03.2017
09:52:04
это новый докер так говорит
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 60ccb22
Built: Thu Feb 23 10:53:29 2017
OS/Arch: linux/amd64
Experimental: false
я зачем то подумал что все это уже видели

Evgeny
02.03.2017
10:47:56

Алексей
02.03.2017
10:48:12
ну я новых хост для поиграться щас разворачивал
пробовать не провал
но два имиджа в нем работают

Evgeny
02.03.2017
10:49:40
о! @dd_bb - не твой ли баг пофикшен?
Fix side effect panic in overlay encryption and network control plane communication failure ("No installed keys could decrypt the message") on frequent swarm leader re-election #25608

yopp
02.03.2017
11:27:55
Нет :)

Алексей
02.03.2017
13:29:53
Всем добра. Нубский вопрос: как в entrypoint можно получить значение, которое передаётся в —user или user (docker-compose.yml)?

Никита
02.03.2017
13:56:17


Алексей
02.03.2017
14:01:07
Это немного не то, по-моему.
Тут речь не о кастомном аргументе идёт, а о встроенном в Docker.
Вот в Dockerfile есть директива USER. Меня интересует как можно её внутри контейнера получить.
По логике, она должна бы быть доступна, т.к. разработчик вполне может хотеть что-то сделать с упоминанием пользователя.
Ну или опишу конкретно мой кейс. Возможно, я решаю его неправильно.
Есть официальный образ postgres. Нужно чтобы volume /data/db на хостовой машине создавался с правами пользователя, который указан в конфиге docker-compose.yml (а туда передаётся переменная среды UID).
В README образа уже есть два варианта:
1. Подмонтировать /etc/passwd
2. Между инициализацией данных и запуском БД сделать chown с нужным пользователем.
Я вижу второй вариант более правильным, но не совсем понимаю, как его правильно сделать.

Eugene
02.03.2017
14:09:58
Юзайте userns-remap

Алексей
02.03.2017
14:10:16
А можно поподробнее или ссылочку?

Admin
ERROR: S client not available

Google

Eugene
02.03.2017
14:10:57
https://blog.yadutaf.fr/2016/04/14/docker-for-your-users-introducing-user-namespace/
вкратце- в контейнере файлы создаются под рутом, на хосте под заремапленным пользователем

Алексей
02.03.2017
14:14:07
В контейнере файлы не под рутом создаются.
Кстати, в каждом контейнере - под своим пользователем.
У меня связка контейнеров же через docker-compose.
Ну и как-то это не очень переносимо, по идее. Это же опция демона. То есть, каждому, кто захочет запустить приложение в докере нужно будет у себя параметры запуска демона твикать?
Мне бы как-то хотелось добиться того, что человек стянул к себе проект из Git, набрал docker compose up и получил работающий стек из коробки. Чтобы и файлы были доступны его пользователю.

Anatoly
02.03.2017
14:18:14
А почему так важно монтировать данные в fs? Мы от такой схемы на named volumes переходим. Слишком много геморроя, особенно для виндузятников (есть и такие, да)

Алексей
02.03.2017
14:18:29
Например, с образом mongo это работает из коробки. Там монга запускается через gosu и всё ок.
С Postgres - сложнее, т.к. там ещё initdb работает сначала под пользователем postgres, а дальше можно под чем угодно базу гонять.
Кстати, виндузятников тут не будет, так что это не проблема.

Алексей
02.03.2017
14:22:33

Алексей
02.03.2017
14:23:04
Но вообще вопрос с named volumes - посмотрю. Тем более, они всё равно рекомендуются в третьей версии compose.

Anatoly
02.03.2017
14:23:10

Алексей
02.03.2017
14:23:22
ведь после ее установки пользователь в контейнре будет тот котороый в ней указан

Алексей
02.03.2017
14:24:05

Алексей
02.03.2017
14:24:42
да вам
id команда такая
или whoami

Алексей
02.03.2017
14:26:56
Гм, а чем она мне поможет?
Она возвращает текущего пользователя. А мне нужно будучи уже внутри Docker сделать chown с желаемым UID пользователя, который будет передан докеру от docker-compose.

Evgeny
02.03.2017
14:27:53
чот вы не понимаете

Алексей
02.03.2017
14:27:55
В принципе, мне ничто не мешает завести переменную среды, но мне кажется, что должно быть возможно работать с тем, что передано в --user и тогда переменная среды - костыль.

Evgeny
02.03.2017
14:28:23
Либо фиксируйте и синхронизируйите ID, либо любой другой костыль на ваш выбор

Google

Алексей
02.03.2017
14:28:51
Поясните 'фиксировать и синхронизировать ID'?
Это очень абстрактно звучит.
Костыль я придумать могу без проблем (та же переменная среды новая), но мне кажется, что он не нужен. Но я пока не нашёл в документации информации об этом.

Anatoly
02.03.2017
15:35:33

Алексей
02.03.2017
15:36:59
Но для этого пользователь должен существовать в контейнере, чтобы шелл запущенный под ним вернул по id или whoami его ID. В общем-то, вопрос в том, как этого пользователя создать для начала :)

Anatoly
02.03.2017
15:42:38

Алексей
02.03.2017
15:42:55
Хм.

Anatoly
02.03.2017
15:43:00
Пихайте в него числами написанов документашке