
Jentry
14.03.2018
11:42:21
Привет, ни у кого не случалось в swarm'е на 17.09.0-ce такое, что контейнеры неправильно резолвят IP при обращении к сервису по имени? Проявилось спонтанно, docker inspect <container_id> показывает один IP, при обращении к нему из этой же сети по имени IP другой (к тому же статический и не меняется если грохать контейнер).

shadowjack
14.03.2018
11:54:22
К вопросу о статике - я статику собираю прям в контейнер с nginx, как выше советовали.
Чтобы на остальные сервисы не влияло, вперед ставлю другой nginx который форвардит запросы куда нужно.

Jentry
14.03.2018
12:34:44
Отвечая на свой вопрос - нужно указывать в стримах nginx явное указание резолвера docker: resolver 127.0.0.11 valid=30s;

Google

Slava
14.03.2018
12:36:08
Всем привет.
Столкнулся с такой проблемой. Контенер не стартует после перезагрузки виртуалки
docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf —name redis redis:alpine redis-server /usr/local/etc/redis/redis.conf
Но если убрать из строки запуска комманду redis-server /usr/local/etc/redis/redis.conf, то все работает как надо.
docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf —name redis redis:alpine

bykva
14.03.2018
12:46:50
пользуйся ``` для выделения блоков кода...

Slava
14.03.2018
13:02:50

Grishq
14.03.2018
13:02:53
docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf —name redis redis:alpine redis-server /usr/local/etc/redis/redis.conf
ы)

bykva
14.03.2018
13:14:17
насколько я помню, если есть аргументы (содержащие дефисы?) их нужно отделять с помощью --:
docker run -d \
--restart=always \
-p 6379:6379 \
-v /xxx/redis.conf:/xxx/redis.conf \
--name redis \
redis:alpine \
-- redis-server /usr/local/etc/redis/redis.conf

Artem
14.03.2018
13:27:10
не вариант замонтировать по дефолтному пути конфига чтобы проверить?

Slava
14.03.2018
13:28:21
не работает. При перезапуске виртуалки также не стартует, только вручную

Artem
14.03.2018
13:47:44
ну так значит конфиг кривой
нужно курить логи

Slava
14.03.2018
13:50:48
да. если не передовать комманду то все ок

Google

Artem
14.03.2018
13:51:24
так в чем проблема так работать с контейнером?)

Slava
14.03.2018
13:52:07
проблема в ручном запуске контенера. нужно vagrant up и вперед

Artem
14.03.2018
13:52:58
а что контейнер нельзя запускать не указывая command?

Slava
14.03.2018
13:53:50
ну можно не комманду указывать, а аргумент - путь до конфига. но результат тотже

Artem
14.03.2018
13:54:16
docker run -d —restart=always -p 6379:6379 -v /vagrant_data/redis/conf/redis.conf:/etc/redis/redis.conf —name redis redis:alpine
вот так сделать вообще никак?
тогда никакие пути указывать ненадо аргументами

Slava
14.03.2018
13:56:56
сейчас попробую.
в alpine нет /etc/redis/
вроде как там только можно редис серверу аргументом передать конфиг. или я не понял где дефолтный конфиг лежит.

Artem
14.03.2018
13:58:44
а да, действительно дефолтно он там не лежит
в моих образах энтрипойнт на него указывает
/usr/bin/redis-server /etc/redis/redis.conf

bykva
14.03.2018
14:00:14
Используем systemd для запуска docker-контейнеров
[Unit]
Description=My Awesome Service
Requires=docker.service
After=docker.service
[Service]
Restart=always
RestartSec=3
ExecStartPre=/bin/sh -c "/usr/bin/docker rm -f my-awesome-service 2> /dev/null || /bin/true"
ExecStart=/usr/bin/docker run --rm -a STDIN -a STDOUT -a STDERR --env-file=/etc/default/my-awesome-service -p 0.0.0.0:3301:3301 -v /etc/project/service:/etc/wallarm -v /var/lib/blacklist:/var/lib/blacklist -v /var/log/project/service:/var/log/wallarm --name my-awesome-service wallarm-dkr.jfrog.io/my-awesome-service:v0.17.0.0
ExecStop=/usr/bin/docker stop my-awesome-service
[Install]
WantedBy=multi-user.target
#systemd #docker

Artem
14.03.2018
14:00:50
и чем же -d плох то?
если докер стартует через системд, то какая разница как он будет ранить контейнеры?

bykva
14.03.2018
14:02:02
м... всем? он просто в бекграунде контейнер запускает, тогда как systemd будет следить за его состоянием, перезапуском, собирать логи

Slava
14.03.2018
14:02:07

Artem
14.03.2018
14:02:19
параметр restart always тогда как работает?

Slava
14.03.2018
14:03:39
в alpine entrypoint
`
#!/bin/sh
set -e
# first arg is -f or --some-option
# or first arg is something.conf
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
set — redis-server "$@"
fi
# allow the container to be started with --user
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
chown -R redis .
exec su-exec redis "$0" "$@"
fi
exec "$@"
`

Google

bykva
14.03.2018
14:03:52
а запускаешь ты его как при загрузке виртуалки?
кроном?

Slava
14.03.2018
14:03:56
не вижу где тут дефолтный конфиг

Artem
14.03.2018
14:04:18
Докер демон запускается через системд при старте виртуалки
после этого он по полиси ранит все контейнеры
которые нужно ранить

Slava
14.03.2018
14:05:05
ну в убунту вроде системд он наверное и докер стартует

Artem
14.03.2018
14:05:22
да везде уже по дефолту системд старутет докер

Slava
14.03.2018
14:05:58
просто с другими контейнерами нет проблем стартуеют и норм.
видимо придется собрать образ, изи не получается)
докер куда логи пишет?

Artem
14.03.2018
14:07:46

Roman
14.03.2018
14:09:08
Ребята, что используете для nginx + letsencrypt?

bykva
14.03.2018
14:09:40

Artem
14.03.2018
14:10:40
да даже для 10-20 уже неприкольно расписывать системд сервис, когда это нативный функционал докера который передается одним параметром

bykva
14.03.2018
14:12:06
нет, потому что для нескольких сервисов это удобно. есть ансибл, который раскидает все что нужно за тебя

Artem
14.03.2018
14:12:40
так ансибл может так же и докером рулить, притом плейбуки будут в данном случае короче

Google

Roman
14.03.2018
14:12:57
Где можно посмотреть production ready docker stack compose файлы для обучения?

Artem
14.03.2018
14:13:40
компоуз подходит только для маленьких "продакшенов" уровня одного хоста

Alexandr
14.03.2018
14:13:45
Друзья, если есть кто из московского ланита - вашу маршрутку эвакуируют от м Рижская

shadowjack
14.03.2018
14:15:11

Slava
14.03.2018
14:19:36

Artem
14.03.2018
14:20:18
проблема только после рестарта виртуалки?

shadowjack
14.03.2018
14:21:32

Dmitriy
14.03.2018
14:22:36
Спрошу еще раз. Подскажите пожалуйста в docker swarm. Как можно сделать что запросы outbound (в интернет), шли с worker ip адреса если даже запрос идет с manager? Я с сетями на вы)

Slava
14.03.2018
14:24:06

Artem
14.03.2018
14:24:58
тогда может проблема в маунте который не успевает смонтироваться или недоступен для чтения на момент запуска
в любом случае тут не проблема докера, а с вм или вагрантом что-то

Nurik
14.03.2018
15:11:53
Подскажите, есть named volume от одного проекта, хочу заюзать его внутри docker-compose другого проекта. Пробовал делать через volumes: в корне но он создаёт новый. Что впринципе и понятно. В доке не нашёл нужной опции. Это возможно ?

shadowjack
14.03.2018
15:25:35
Нужно переименовать, docker compose называет вольюмы project_volumename
Переименовать не очень просто, т.к. нативной команды нет.
https://github.com/moby/moby/issues/31154

Nurik
14.03.2018
15:31:23

shadowjack
14.03.2018
15:34:46
Нет, я имел в виду 1 прокся + 1 статика.
Если не хочешь чтобы при обновлении статики остальные дергались
Т.е. для статики будет выделенный nginx, остальное как раньше будет.
Собственно nginx нужен для 1) SSL 2) Статики 3) Раскидывать запросы по остальным сервисам, возможно с балансировкой нагрузки.

Google

shadowjack
14.03.2018
15:43:46
Можно функцию 2 вынести на отдельный контейнер.

Nurik
14.03.2018
16:04:05

shadowjack
14.03.2018
16:07:23
Я не совсем понял, сейчас app-ы свою статику сами отдают?

Nurik
14.03.2018
16:07:25
Тогда в этом случае, нужно чтобы статика из app1 и app2 монтировалась в volume, чтобы nginx знал, откуда тащить данные при сборке.

shadowjack
14.03.2018
16:08:41
Статика она на то и статика, что не меняется. При сборке image-ов собирай всю статику в один контейнер.

Nurik
14.03.2018
16:10:17
И потом изображения могут заливаться с App2 или App1 и тогда их нужно куда-то класть. Без volume не обойтись короче.

shadowjack
14.03.2018
16:20:25
Ну если заливать, то да. А js/css можно при сборке контейнера брать. Обновил приложение - пересобрал контейнер.

Nurik
14.03.2018
16:26:37
Вот в этом случае проблема в том, что каждое приложение в gitlab создаётся по своему пайплайну. И получается, что в каждый пайплайн придётся добавить еще одну джобу, которая будет лезть в репозиторий каждого приложения чтобы достать оттуда данные для сборки нового контейнера nginx и пушить его на прод. Я просто незнаю насколько это будет правильно. Нужно как-то это все запихать в текущий workflow
В моем случае там 2 репо с админками.
А хранить все эти файлы в подключаемом volume для nginx плохая идея ? Там какой-то оверхед будет на доступ к ФС ?

shadowjack
14.03.2018
16:30:25
Минимальный, не стоит даже на это обращать внимания
Идея норм если нужно разделяемые данные между контейнерами
Ток масштабировать не удобно

Jentry
14.03.2018
16:33:09
Мне кажется если нужны совсем разделямые данные, то лучше заюзать распределенные фс, все-таки волюмы не под это проектировались)
А оверхед на фс минимальный в докере, вот замечательная pdf-ка, никто, кстати обновленную не встречал? https://arxiv.org/pdf/1709.10140.pdf

Nurik
14.03.2018
17:11:02
Идея норм если нужно разделяемые данные между контейнерами
А как насчёт варианта c использованием multi-stage билдов ?:
На проде для nginx Dockerfile прописать:
FROM app1 AS data1
FROM app2 AS data2
FROM nginx
COPY --from=data1 /usr/src/app/public /data/
COPY --from=data2 /usr/src/app/public /data/
И получается что волюмы будут использоваться только для загружаемой статики из app1 или app2