Bogdan (SirEdvin)
multistage и вперед
Зачем использовать то, что есть, билдь все либы с нуля
Artem
а зачем вам на хосте сохранять другие права если все контейнеры в этот маунт могут писать?
Artem
с теми правами которые выставились из контейнера, при учете запуска аппов с одного типа образов
Alex
id юзеров на хосте и в контейнере вообще могут не совпадать, может стоять владельцем просто номер id
То есть это нормальное поведение докера, когда созданным на хосте каталогам докер сам назначает владельца? При этом доступ с хоста в эти каталоги доступен либо руту, либо пользователю с id аналогичным id владельца?
Artem
ну да
Artem
главное что из контейнеров они доступны
Anton
multistage и вперед
Ты не понял - он там просто не собирается
Artem
т.к. присвоив права username на хосте, из контейнера они вряд ли будут иметь владельца username, в скорее всего какой нибудь системный юзер либо вообще id 1001 например
Alex
а зачем вам на хосте сохранять другие права если все контейнеры в этот маунт могут писать?
Мне это не нужно. Я вижу это как побочное поведение и меня оно не сильно тревожит. Тревожит тот факт, что мои приложения должны запускаться не от root и тут начинается шаманская пляска внутри контейнера. Приложению нужно писать в /var/log/myapp , а каталог принадлежит руту.
Artem
просто один раз изнутри контейнера сделать chown на правильного юзера
Artem
и дальше эти права остануться на этом маунте на хосте
Alex
и дальше эти права остануться на этом маунте на хосте
А вот тут у меня возникает раздвоение личности :) Чем отличается монтирование каталога в docker-compose.yml от монитирования в Dockerfile, кроме того, что это разные этапы
Artem
в компоузе ты маунтишь каталог
Artem
а в докерфайле засовываешь содержимое его при сборке образа
Artem
когда маунтишь из компоузе он маунтится поверх текущего присутствующего каталога не затрагивая при этом то что было в изначальном каталоге
Artem
так что через докерфайл это впринципе не монтирование
Alex
когда маунтишь из компоузе он маунтится поверх текущего присутствующего каталога не затрагивая при этом то что было в изначальном каталоге
То есть я могу в Dockerfile инициализировать нужные каталоги, поместить с хоста нужные файлы и изменить владельца (допустим через sh скрипт), а на этапе docker-compose примонтировать и это не затронет права созданные на предыдущем этапе?
Artem
да
Artem
только если ты монтируешь в компоузе, то зачем вообще до этого засовывать тоже самое при сборке образа?
Artem
ты либо монтируешь с хоста, либо держишь код в образе
Artem
одно другое перекрывает
Alex
только если ты монтируешь в компоузе, то зачем вообще до этого засовывать тоже самое при сборке образа?
Я монтирую с хоста не только код, там mp3 файлы (У меня радио) поэтому копировать не желательно :)
Alex
Поэтому на этапе сборки я полюбому должен определить права, либо это нужно делать через compose
Artem
ну так статичный код тогда вшиваешь в образ при сборке в докерфайле, а папку с данными маунтишь с хоста
Artem
права можно указать и без скрипта на этапе сборки в докерфайле RUN chown ....
Artem
ну так статичный код тогда вшиваешь в образ при сборке в докерфайле, а папку с данными маунтишь с хоста
только после маунта один раз из этого контейнера необходимо выполнить chown на папку с примонтированными данными
Artem
но это никак не связано с докерфайлом, т.к. маунту срать на права которые стояли на папке вместо которой его подмонтировали
Alex
только после маунта один раз из этого контейнера необходимо выполнить chown на папку с примонтированными данными
То есть я опять возвращаюсь к идее, что нужен некий скрипт, который запускается первым в контейнере, разруливает права и потом запускает нужное приложение. Надо попробовать.
Artem
ну у тебя маунт же один и тот же?
Artem
если папка на хосте которая монтируется одна и та же, то это нужно всего один раз чтобы выставить права из контейнера
Artem
дальнейшие маунты будут с теми же правами в этих образах
Artem
в аналогичном образе на базе которого ты собираешь одни и те же id юзеров
Artem
а права остаются на хочте
Alex
Понял.
Artem
к примеру у меня есть папка которая монтируется в /var/lib/mysql и владельцем внутри контейнера mysql:mysql а на хосте она отображается с такими правами drwxr-xr-x 12 systemd-bus-proxy ssh_keys 4096 май 5 10:16 data
Artem
и любой образ на базе стандартного mysql образа будет с правильными правами ее видеть если примонтирую к нему
Artem
м?
Alex
Основная проблема с правами внутри контейнера. Каталоги разбросаны по системе /var/log/myapp /opt/myapp /home/user/myapp может мне все, что связано с приложением хранить в $HOME ? И не нужно будет с chown возиться. С точки зрения практики, насколько это корректно?
Artem
можно и так, это не принципиально, контейнер != вм
Artem
поэтому в плане безопасности никаких проблем не должно быть, можно хоть в корне хранить
Artem
вообще лучше бы аппу работать от рута
Artem
тогда не будет проблем с правами
Alex
тогда не будет проблем с правами
Точно. Но тут психологическая проблема :))
Artem
рут в контейнере != рут доступу к хосту
Artem
по правильному там только один процесс аппликейшена должен работать и все
Artem
а данные можно будет хранить тогда /app /data /log
Artem
если ваш пользователь имеет доступ к маунту с хоста (т.к. выставлены права из контейнера) то это было бы аналогично если бы апп работал от рута и так же имел те же доступы
Artem
только без гемороя со сменой прав
Alex
К сожалению, есть такая штука liquidsoap, не удается запустить ее от рута :)
Artem
ну если уже ограничения аппы, то да деваться некуда, тоже самое как и с mysql из под рута запускать геморойно в контейнере
Alex
Ребят, а если я хочу запускать контейнер с базой из systemd при старте
Alex
мне в секцию Service что корректно писать ? Restart=no ?
Alex
и можно ли ExecStart ууказать как /usr/bin/docker start container-name ?
Artem
а зачем еще системд в контейнере?
Artem
сама база не может демоном висеть?
Alex
не в контейнере на хосте
Artem
аа
Alex
мне надо после ребута поднять контейнер.
Artem
так докер в автозагрузку и контейнеры в restart always может?
Alex
докер в автозагрузке
Alex
он тогда постоянно ребутиться
Artem
если с контейнером все норм и он не выпадает с ошибкой то при restart=always он вроде как запускает те контейнеры которые работали до перезагрузки
Artem
а если он рестартит постоянно, то значит контейнер выпал с ошибкой какой то и ручной запуск его так же не поднимет
Alex
он тогда постоянно ребутиться
У меня было такое, когда контейнер немедленно останавливался (приложение в контейнере вылетало с ошибкой)
Artem
обычно через стейт это можно увидеть и покурить почему в docker logs
Alex
приложение в контейнере не вылетает. Если запускать ручками всё ок.
Alex
в логах нормальный старт постгреса.
Artem
так рестарт будет только если стейт будет не running
Artem
точнее UP
Alex
в логах нормальный старт постгреса.
А как вы ручками запускаете?
Alex
docker start container-name
Alex
и контейнера остается запущенным\?
Alex
А если сделаете ребут, то контейнер бесконечно рестартится?
Alex
да
Alex
что значит ребут ?
Alex
бесконечно рестартиться если я его через systemd запускаю