@docker_ru

Страница 178 из 1375
Alexey
17.05.2017
10:19:03
Привет всем. Подскажите, кто-то сталкивался с проблемами докера при попытке запускать процессы в контейнерах не от рута? Проблема в том, что моему приложению нужно писать лог в /var/log/myapp, а этот каталог монтируется на хост, но монитрование делает рут, соответственно каталог принадлежит теперь руту. Таких каталогов у меня несколько. В итоге начинается пляска с chown и entrypoint скриптами, а после смены владельца меняется владелец каталога на хосте...

Если я меняю владельца каталога внутри контейнера, то меняется владелец каталога на хосте... Сейчас точно не помню, кто становится владельцем, вроде netdev юзер...

Bogdan (SirEdvin)
17.05.2017
10:29:43
multistage и вперед
Зачем использовать то, что есть, билдь все либы с нуля

Artem
17.05.2017
10:30:37
Google
Artem
17.05.2017
10:30:57
а зачем вам на хосте сохранять другие права если все контейнеры в этот маунт могут писать?

с теми правами которые выставились из контейнера, при учете запуска аппов с одного типа образов

Alexey
17.05.2017
10:51:27
id юзеров на хосте и в контейнере вообще могут не совпадать, может стоять владельцем просто номер id
То есть это нормальное поведение докера, когда созданным на хосте каталогам докер сам назначает владельца? При этом доступ с хоста в эти каталоги доступен либо руту, либо пользователю с id аналогичным id владельца?

Artem
17.05.2017
10:51:52
ну да

главное что из контейнеров они доступны

Anton
17.05.2017
10:52:55
multistage и вперед
Ты не понял - он там просто не собирается

Artem
17.05.2017
10:53:11
т.к. присвоив права username на хосте, из контейнера они вряд ли будут иметь владельца username, в скорее всего какой нибудь системный юзер либо вообще id 1001 например

Alexey
17.05.2017
10:53:27
а зачем вам на хосте сохранять другие права если все контейнеры в этот маунт могут писать?
Мне это не нужно. Я вижу это как побочное поведение и меня оно не сильно тревожит. Тревожит тот факт, что мои приложения должны запускаться не от root и тут начинается шаманская пляска внутри контейнера. Приложению нужно писать в /var/log/myapp , а каталог принадлежит руту.

Artem
17.05.2017
10:53:57
просто один раз изнутри контейнера сделать chown на правильного юзера

и дальше эти права остануться на этом маунте на хосте

Alexey
17.05.2017
10:55:41
и дальше эти права остануться на этом маунте на хосте
А вот тут у меня возникает раздвоение личности :) Чем отличается монтирование каталога в docker-compose.yml от монитирования в Dockerfile, кроме того, что это разные этапы

Artem
17.05.2017
10:56:01
в компоузе ты маунтишь каталог

а в докерфайле засовываешь содержимое его при сборке образа

Google
Artem
17.05.2017
10:57:07
когда маунтишь из компоузе он маунтится поверх текущего присутствующего каталога не затрагивая при этом то что было в изначальном каталоге

так что через докерфайл это впринципе не монтирование

Alexey
17.05.2017
10:58:48
когда маунтишь из компоузе он маунтится поверх текущего присутствующего каталога не затрагивая при этом то что было в изначальном каталоге
То есть я могу в Dockerfile инициализировать нужные каталоги, поместить с хоста нужные файлы и изменить владельца (допустим через sh скрипт), а на этапе docker-compose примонтировать и это не затронет права созданные на предыдущем этапе?

Artem
17.05.2017
10:59:19
да

только если ты монтируешь в компоузе, то зачем вообще до этого засовывать тоже самое при сборке образа?

ты либо монтируешь с хоста, либо держишь код в образе

одно другое перекрывает

Alexey
17.05.2017
11:00:51
только если ты монтируешь в компоузе, то зачем вообще до этого засовывать тоже самое при сборке образа?
Я монтирую с хоста не только код, там mp3 файлы (У меня радио) поэтому копировать не желательно :)

Поэтому на этапе сборки я полюбому должен определить права, либо это нужно делать через compose

Artem
17.05.2017
11:01:25
ну так статичный код тогда вшиваешь в образ при сборке в докерфайле, а папку с данными маунтишь с хоста

права можно указать и без скрипта на этапе сборки в докерфайле RUN chown ....

ну так статичный код тогда вшиваешь в образ при сборке в докерфайле, а папку с данными маунтишь с хоста
только после маунта один раз из этого контейнера необходимо выполнить chown на папку с примонтированными данными

но это никак не связано с докерфайлом, т.к. маунту срать на права которые стояли на папке вместо которой его подмонтировали

Alexey
17.05.2017
11:04:27
только после маунта один раз из этого контейнера необходимо выполнить chown на папку с примонтированными данными
То есть я опять возвращаюсь к идее, что нужен некий скрипт, который запускается первым в контейнере, разруливает права и потом запускает нужное приложение. Надо попробовать.

Artem
17.05.2017
11:04:44
ну у тебя маунт же один и тот же?

если папка на хосте которая монтируется одна и та же, то это нужно всего один раз чтобы выставить права из контейнера

дальнейшие маунты будут с теми же правами в этих образах

Artem
17.05.2017
11:06:57
в аналогичном образе на базе которого ты собираешь одни и те же id юзеров

Google
Artem
17.05.2017
11:07:13
а права остаются на хочте

Alexey
17.05.2017
11:07:59
Понял.

Artem
17.05.2017
11:08:12
к примеру у меня есть папка которая монтируется в /var/lib/mysql и владельцем внутри контейнера mysql:mysql а на хосте она отображается с такими правами drwxr-xr-x 12 systemd-bus-proxy ssh_keys 4096 май 5 10:16 data

и любой образ на базе стандартного mysql образа будет с правильными правами ее видеть если примонтирую к нему

Artem
17.05.2017
11:11:26
м?

Alexey
17.05.2017
11:12:58
Основная проблема с правами внутри контейнера. Каталоги разбросаны по системе /var/log/myapp /opt/myapp /home/user/myapp может мне все, что связано с приложением хранить в $HOME ? И не нужно будет с chown возиться. С точки зрения практики, насколько это корректно?

Artem
17.05.2017
11:15:09
можно и так, это не принципиально, контейнер != вм

поэтому в плане безопасности никаких проблем не должно быть, можно хоть в корне хранить

вообще лучше бы аппу работать от рута

тогда не будет проблем с правами

Alexey
17.05.2017
11:16:30
тогда не будет проблем с правами
Точно. Но тут психологическая проблема :))

Artem
17.05.2017
11:16:51
рут в контейнере != рут доступу к хосту

по правильному там только один процесс аппликейшена должен работать и все

а данные можно будет хранить тогда /app /data /log

если ваш пользователь имеет доступ к маунту с хоста (т.к. выставлены права из контейнера) то это было бы аналогично если бы апп работал от рута и так же имел те же доступы

только без гемороя со сменой прав

Alexey
17.05.2017
11:19:29
К сожалению, есть такая штука liquidsoap, не удается запустить ее от рута :)

Artem
17.05.2017
11:20:11
ну если уже ограничения аппы, то да деваться некуда, тоже самое как и с mysql из под рута запускать геморойно в контейнере

Alex
17.05.2017
11:20:44
Ребят, а если я хочу запускать контейнер с базой из systemd при старте

Google
Alex
17.05.2017
11:21:07
мне в секцию Service что корректно писать ? Restart=no ?

и можно ли ExecStart ууказать как /usr/bin/docker start container-name ?

Artem
17.05.2017
11:21:27
а зачем еще системд в контейнере?

сама база не может демоном висеть?

Alex
17.05.2017
11:21:39
не в контейнере на хосте

Artem
17.05.2017
11:21:46
аа

Alex
17.05.2017
11:21:51
мне надо после ребута поднять контейнер.

Artem
17.05.2017
11:22:26
так докер в автозагрузку и контейнеры в restart always может?

Alex
17.05.2017
11:22:40
докер в автозагрузке

Admin
ERROR: S client not available

Alex
17.05.2017
11:22:49
он тогда постоянно ребутиться

Artem
17.05.2017
11:23:42
если с контейнером все норм и он не выпадает с ошибкой то при restart=always он вроде как запускает те контейнеры которые работали до перезагрузки

а если он рестартит постоянно, то значит контейнер выпал с ошибкой какой то и ручной запуск его так же не поднимет

Alexey
17.05.2017
11:24:39
он тогда постоянно ребутиться
У меня было такое, когда контейнер немедленно останавливался (приложение в контейнере вылетало с ошибкой)

Artem
17.05.2017
11:25:17
обычно через стейт это можно увидеть и покурить почему в docker logs

Alex
17.05.2017
11:25:30
приложение в контейнере не вылетает. Если запускать ручками всё ок.

в логах нормальный старт постгреса.

Artem
17.05.2017
11:26:33
так рестарт будет только если стейт будет не running

точнее UP

Alexey
17.05.2017
11:27:46
в логах нормальный старт постгреса.
А как вы ручками запускаете?

Google
Alex
17.05.2017
11:28:21
docker start container-name

Alexey
17.05.2017
11:29:28
и контейнера остается запущенным\?

А если сделаете ребут, то контейнер бесконечно рестартится?

Alex
17.05.2017
11:30:10
да

что значит ребут ?

бесконечно рестартиться если я его через systemd запускаю

Alexey
17.05.2017
11:30:38
Ну, перезагрузка. Вам же автостарт нужен?

Alex
17.05.2017
11:30:45
systemctl start docker-db.service

да

Alexey
17.05.2017
11:32:46
А вы доки читали? Просто я пока не сталкивался с этим в своих задачах

https://docs.docker.com/engine/admin/host_integration/

Alex
17.05.2017
11:33:19
Читал.

Konstantin
17.05.2017
11:33:53
бесконечно рестартиться если я его через systemd запускаю
Докер сам выполняет роль супервизора, не нужно контейнеры через systemd

Alex
17.05.2017
11:34:17
вот!

а как ему сказать какие контейнеры надо запускать а какие нет ? :)

Konstantin
17.05.2017
11:34:44
Запускай с флагом restart=always

Выше тебе сазали

Alex
17.05.2017
11:35:19
контейнер ребутиться каждые 10 секунд при этом.

Konstantin
17.05.2017
11:35:23
Это и есть флаг "аатозагрузки"

Он не за этого перезапускается, 200%

Alex
17.05.2017
11:35:59
почему тогда не перезапускается когда ручками запускаешь ?

и когда был upstart не перезапускался тоже ?

Страница 178 из 1375