Старый
поставить внутрь контейнера нетстат
Старый
и посмотреть
Павел П.
угу. Спасибо!
George
какой-то странный контейнер
Павел П.
https://github.com/mediagis/nominatim-docker/tree/master/3.4
Vlad
Vlad
гайз, может кто-то окинуть опытным взглядом и сказать, где я налажал? сервис 'а' и 'b' идентичны по сути, но по содержанию имеют разные файлы внутри, но по какой-то причине файл из сервиса 'a' копируется в директорию сервиса 'b'.
Tadeusz
volumes: data
George
что за ересь
Vlad
что за ересь
ересь - всё что на скрине или конкретно результат? задача вообще стоит такая: есть два сервиса, у каждого свои миграции есть сервис ликвибейса композ запускает 2 сервиса, шерит с них миграции в локальный volume, откуда эти миграции подхватывает ликвибейс и применяет к базе на скрине чисто шаринг данных пытаюсь понять
George
зачем так криво - не понимаю
George
почему ты не можешь не шарить миграции от слова совсем
George
нормальная практика, когда у тебя сервис А идет в базу А и делает свои миграции сам, а сервис Б- в базу Б
George
+ ты забыл (наверное), что вольюм - он перезаписывает содержимое контейнера, скрывает его. Т.е. если ты вольюм не наполняешь снаружи, то файлы внутри контейнера по этому пути оказываются недоступны
George
решением может быть монтировать вольюм в отдельный каталог и наполнять его файлами в скрипте docker-entrypoint.sh в контейнере, который ты засунешь в entrzyoint
George
по аналогичному принципу postgres/mysql в контейнерах свои базы создают... в вольюме
George
сорри, много букаф
Vlad
благодарю🙏
George
а если у тебя сервис А и сервис Б смотрят в одну таблицу в бд.. то пардон.. это не микросервисы
George
а распределенный монолит
George
)
Y4n
Поясните плз про volumes верхнего уровня. Пишу volumes: data: Тут дата это название каталога для общего использования или алиас? Как мне расшарить папку из другого проекта (docker-compose)
George
volumes: data: external что-то типа такого написать
George
data - это символическое имя, по которому ты обращаешься к вольюму. Он хранится в этом случае внутри /var/lib/docker/volumes
George
а если ты хочешь попросту папку шарить, то описываешь секцию volumes: внутри описания сервиса и там что-то типа - PATH_ON_HOST:PATH_IN_CONTAINER
Y4n
а если ты хочешь попросту папку шарить, то описываешь секцию volumes: внутри описания сервиса и там что-то типа - PATH_ON_HOST:PATH_IN_CONTAINER
кажись мой случай, но у меня 2 проекта в папках условно backend frontend. И вот монтируя волюм в бэке из фронта мне приходится писать аля ~/frontend/storage:var/www получается я привязываюсь к моей структуре на компе...
George
ты можешь сохранять в вольюм, а не в бинд маунт
George
он будет доступен по уникальному имени и не будет ездить по файловой системе туда-сюда. Единственная проблема остается - как его наполнить нужными файлами в нужный момент, но я уверен, что ты справишься )
Anonymous
ты можешь сохранять в вольюм, а не в бинд маунт
это все равно будет структура на локальном компе
George
в смысле - да, на локальном компе, но она будет статичная на каждом компе... и не будет проблемы из какого каталога запускать docker-compose
Y4n
он будет доступен по уникальному имени и не будет ездить по файловой системе туда-сюда. Единственная проблема остается - как его наполнить нужными файлами в нужный момент, но я уверен, что ты справишься )
на самом интересном оборвал) я пытаюсь сделать volumes: data: , но ведь он создает волюм всей папки где лежит docker-compose. А если нужна папочка глубже? И еще я так понял есть нюансики если монтируешь сперва общую папку вроде data:/var/www а после mydata:/var/www/mydata
George
50% вопросов отпадет
George
> data:/var/www а после mydata:/var/www/mydata и, да, с грехом пополам -так работает.
tatyana
Добрый день, коллеги! Для микросервисов под управлением docker swarm в качестве persisten volume используем rbdшки кластера CEPH Никто не сталкивался со следующей проблемой: при переезде контейнера на другую ноду persisten volume не может самостоятельно отмантироваться ?
Sergey
почему данная конструкция не работает в bash скрипте docker cp postgres_1:/backups/${BACKUP} /backups/${NOW}/postgres
Sergey
если указать полный путь без переменных то все работает а так не находит файл
Sergey
no such file or directory lstat /var/lib/docker/overlay2/5d5230dc76feb3d9959579db8f34e6b9f15e73472626b3dee5fc27d17889cd59/merged/backups/backup_2019_12_19T12_20_56.sql.gz
George
Он тебе все написал
George
Нет файла с указанным именем. Что ещё ты хочешь услышать ?
Sergey
так файл есть втом то и дело
George
Are you sure ?
Sergey
/var/lib/docker/overlay2/5d5230dc76feb3d9959579db8f34e6b9f15e73472626b3dee5fc27d17889cd59/merged/backups/ он почемуто ищет его локально по данному пути а не внутри docker контейнера
George
set -x в баш засунь
George
И посмотри как реально команда выглядит
Sergey
+ docker cp $'postgres_1:/backups/backup_2019_12_19T12_33_43.sql.gz\r' /backups//2019-12-19/postgres
Sergey
я так понял проблема в \r
George
Что это за дичь
George
Доллар лишний откуда
Sergey
или нет
George
Одно точно - это кривая команда
Sergey
после cp?
Sergey
в скрипте его неут
George
Она кривая. Надо сделать нормально. Переписывай
Sergey
#!/bin/bash set -x. BACKUPDIR='/backups/' NOW=date +"%Y-%m-%d" # BACKUP DIRECTORY if [ ! -d ${BACKUPDIR} ] ; then /bin/mkdir ${BACKUPDIR} echo "CREATE DIR ${BACKUPDIR}" else echo "DIRECTORY ${BACKUPDIR} exist" fi if [ ! -d ${BACKUPDIR}/${NOW} ] ; then /bin/mkdir ${BACKUPDIR}/${NOW} else echo "Directory Created" fi if [ ! -d ${BACKUPDIR}/${NOW}/postgres ] ; then /bin/mkdir ${BACKUPDIR}/${NOW}/postgres else echo "Directory Created" fi docker exec -ti votv_postgres_1 backup DB_FILE=docker exec -ti postgres_1 ls -la /backups/ | tail -n 1| awk '{ print $9 }' docker cp postgres_1\:/backups/${DB_FILE} ${BACKUPDIR}${NOW}/postgres
George
Все разъехалось. Маркдаун тут стандартный
George
мультилайн Код Так Пишется
Sergey
как его сделать
George
Тремя апострофами, стандартно
Sergey
George
Два совета
George
1.backup - это что ? Саиописнвй скрипт ?
Sergey
да
George
2. Сделай echo "${DB_FILE}" перед копированием на хост
George
Ну, и ты всегда можешь через пайп вылить бекап
George
Типа docker exec -it postgres cat backup_file | cat > file_on_host
Sergey
та делал echo "${DB_FILE}" выводит название файла что мне и нужен
George
docker cp "postgres_1\:/backups/${DB_FILE}" "${BACKUPDIR}${NOW}/postgres" - или так попробуй
George
Проблема баша в том, что там если спецсимволы внутри переменной типа кавычек - все может сломаться
George
Типа docker exec -it postgres cat backup_file | cat > file_on_host
Этот вариант лишён этого недостатка...
Sergey
тоже самое
George
Типа docker exec -it postgres cat backup_file | cat > file_on_host
Вот так точно проблемы не будет ) если прямо exec'ом утилиту бекапа дергать.