
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

Artem
14.03.2018
14:08:20

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
проблема только после рестарта виртуалки?

Admin
ERROR: S client not available

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, остальное как раньше будет.

Google

shadowjack
14.03.2018
15:39:04
Собственно nginx нужен для 1) SSL 2) Статики 3) Раскидывать запросы по остальным сервисам, возможно с балансировкой нагрузки.
Можно функцию 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