|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
Использую образ отсюда https://hub.docker.com/_/postgres Беру версию 11.3 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Поднимаю инстанс. Подключаюсь из тогоже докера psql и создаю 1 базу. Поработал с базой. После stop - и повторного start - все мои изменения потеряны. Почитал про docker commit. Применил. Всё равно изменнения потеряны. Я где-то делаю систематическую ошибку. Знатоки - прошу подскажите в какой части. Все логи не могу приаттачить. Будет много флуда. И там сложно отделить главное от второстепенного. Но могу точечно показать статусы того что надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 11:04 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
Выборочно. Вот здесь поднимаю БД. Код: sql 1.
Подключаюсь к консоли Код: sql 1.
Какие-то активности Код: sql 1.
Коммит Код: sql 1.
Stop Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 11:31 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
maytonПосле stop - и повторного start - все мои изменения потеряны. Почему должно быть как-то по-другому? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 11:49 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
mayton...прошу подскажите.... ну вот смотрите... постгря запускается в контейнере. его изменения будут скинуты после остановки контейнера. если Вам надо сохранять эти измененя, то Вы должны: 1) смапировать файловую систему - место где будут ваши файлы бд внутри контейнера на внешний мир. По Вашей ссылке, что дали инфа есть - немного ниже. Прочитайте обязательно всё... У вас получиться типо такого параметра при вызове... -v pgdata:/var/lib/postgresql/data 2) внутри контейнера всё работает от юзера postgres . И это является мАленького недопонимания обычно, что же надо ещё этому контейнеру. ситуация описана по Вашей ссылке так-же... Заковыка в следующем...Пользователь postgres, но это символьное имя. Этому символьному имени соответствует свой ID из файла passwrd этого образа. Посему любая попытка записи смапированных файлов бд на внешний мир тащат за собой и разрешение доступа самого докера по ID из внутренней оси на внешнюю оси, где запущен сам докер. Один из вариантов разрешения этого - завести точно такого-же юзера на хосте где работает докер. и при запуске контейнера смапировать ещё и passwrd файл с ID пользователя postgres из внешнего хоста. параметр при вызове типо такого: -v /etc/passwd:/etc/passwd:ro TODO: - можно ещё прописать явно проброс порта для внешнего тук-тук из пэгэадмина... - можно создать свой контейнер, внутри которого пропишите инит sql файл для инициализации своих бд с уважением (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 12:12 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
kolobok01) смапировать файловую систему - место где будут ваши файлы бд внутри контейнера на внешний мир. По Вашей ссылке, что дали инфа есть - немного ниже. Прочитайте обязательно всё... У вас получиться типо такого параметра при вызове... -v pgdata:/var/lib/postgresql/data Я думаю это мой вариант. А откуда берётся символическое имя pgdata? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 13:07 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
Это из билд-файла берется? https://github.com/docker-library/postgres/blob/cf9b6cdd64f8a81b1abf9e487886f47e4971abe2/11/Dockerfile Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 13:13 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
Стартовал вот так Код: sql 1.
/nosql - это реально существующий фолдер. И привилегии для пользователя из под которого работате докер - есть. Создал какую-то материальную табличку. Наполнил. Но дата-файлов пока не вижу. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Постгрещщики! Где вы? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 17:51 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
mayton, ИMXO постгрес тут не причем. Для удобства работы с докером нужно поставить докер- компосе. Там все настройки делаются через файлы конфигурации. Ну и в документации почитать, где хранятся файлы БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 22:20 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
mayton, И еще. Если у вас что-то на красной шапке, то там есть дополнительнне настройки безопасности. Которые надо применить к каталогу. Завязано на ce линукс ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 22:25 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
mayton...А откуда берётся символическое имя pgdata? если опять пройти по Вашей ссылке (откуда я скопировал эту строку, из описания - прямо на этой странице.) то видно такую комбинэйшен.. initialize the target directory separately from the final runtime (with a chown in between): $ docker volume create pgdata $ docker run -it --rm -v pgdata:/var/lib/postgresql/data postgres The files belonging to this database system will be owned by user "postgres". т.е. это каталог который Вы создаёте на хосте, где запущен докер. Первым делом создаёте пользователя. далее каталог. даёте ему права на этот каталог. далее запускаете контейнер с маппингом на каталог и на ваш внешний passwrd. при запуске в каталоге должны создаться файлы постгресса. если нет - то повторяете всё с очистки, вчитываясь в страничку ссылку на которую Вы дали в самом начале и т.д.. Если файлы создались - только тогда можете двигаться далее - коннект админом и т.п.. Для понимания что происходит внутри контейнера Вы можете его запускать с параметрами в командной строке и тогда они будут выполняться прямо в контейнере. как то так... двигайтесь по шагам. всё сразу не пытайтесь - слишком много переменных... (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2019, 23:49 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
kolobok0$ docker volume create pgdata $ docker run -it --rm -v pgdata:/var/lib/postgresql/data postgres The files belonging to this database system will be owned by user "postgres". т.е. это каталог который Вы создаёте на хосте, где запущен докер. Первым делом создаёте пользователя. далее каталог. даёте ему права на этот каталог. далее запускаете контейнер с маппингом на каталог и на ваш внешний passwrd. при запуске в каталоге должны создаться файлы постгресса. если нет - то повторяете всё с очистки, вчитываясь в страничку ссылку на которую Вы дали в самом начале и т.д.. Если файлы создались - только тогда можете двигаться далее - коннект админом и т.п.. Для понимания что происходит внутри контейнера Вы можете его запускать с параметрами в командной строке и тогда они будут выполняться прямо в контейнере. как то так... двигайтесь по шагам. всё сразу не пытайтесь - слишком много переменных... (круглый) Смотрите. Я может быть иногда бываю нетерпелив. Есть за мной такой грех. Но вопрос с Постргресом возник из рабочих моментов. Делаю рабочую конфигурацию. Для разраба. Она должна летать на Windows10 на рабочих станциях девов. И на Centos. Дома я тестирую на Ubuntu LTS. (Сейчас в данный момент). На всех конфигурациях будет стоять докер. Нужно обеспечить работу PG. Но с поддержкой сохранения состояния. Тоесть на всех конфигурациях я (и все разработчики) должны знать и понимать где лежит state этой системы чтобы иметь возможность на этот state влиять. Как бывш. Ораклисту мне всё понятно в части датафайлов и табличных пространств. Но у меня возникают вопросы не из серии ЧТО это. А из серии где это лежит и как это ПРИНЯТО делать в лучших домах Европы. Грубо говоря - традиции. ГДЕ традиционно принято хранить состояние докера с постресом? - image docker? - volume docker? Документация на этот счет весьма сухая. Она не говорить как правильно. Как правильно шатдаунить постргес? Мне моё чутье подсказывает что надо зайти аттачем в контейнер и сказать pg_ctl stop. Но где это чьорт возьми делается перед докер коммитом? И все подобные такие мелочи. Вобщем много таких вот вопросов. Простите моё ворчание. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 00:02 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
mayton, Вы не так все делаете. В концепции докера в контейнере (и образе) данных быть не должно, собственно поэтому в самом дескрипторе /var/lib/postgresql/data объявлена как VOLUME - оно вне зависимости о чего-либо будет использовать хостовую фс, а не бутерброд unionfs, соответственно эти данные и в коммите участвовать не должны. Более того, БД в докере крутить - дурной тон, если вы хотите чтобы любой разработчик мог в любой момент времени раскатать себе образ с актуальной структурой БД, то вам нужно при запуске контейнера бутстрапить базу, т.е. Оно должно откуда-то выкачивать (или в образ класть, но так себе) дамп/бэкап/скрипты и накатывать их на голую базу. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 06:23 |
|
Вопрос знатокам Docker
|
|||
---|---|---|---|
#18+
Андрей Панфиловmayton, Вы не так все делаете. В концепции докера в контейнере (и образе) данных быть не должно, собственно поэтому в самом дескрипторе /var/lib/postgresql/data объявлена как VOLUME - оно вне зависимости о чего-либо будет использовать хостовую фс, а не бутерброд unionfs Спасибо Андрей. Именно это я и хотел услышать в топике. Вобщем мой вопрос можно закрывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2019, 12:37 |
|
|
start [/forum/topic.php?fid=53&msg=39812085&tid=1995207]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 239ms |
total: | 384ms |
0 / 0 |