Я пишу скрипт для создания резервных копий базы данных MySQL, работающей в док-контейнере. База данных правильно запущена и работает.
Мой текущий код
#!/bin/bash
PATH=/usr/bin:/usr/local/bin:/root/.local/bin:$PATH
docker-compose exec -T db mkdir -p /opt/booking-backup
docker_backup_path = "/opt/booking-backup/dump_prod_$(date +%F_%R).sql"
copy_backup_path = "/root/backup_scripts/booking_prod/dump_prod_$(date +%F_%R).sql"
docker-compose exec db mysqldump --add-drop-database --add-drop-table --user=root --password = "pw" booking > "$docker_backup_path"
docker-compose exec db mysqldump --add-drop-database --add-drop-table --user=root --password = "pw" booking > "/opt/booking-backup/dump_prod.sql"
[ -d ./backup ] || mkdir ./backup
docker cp $(docker-compose ps -q db):$docker_backup_path $copy_backup_path
Однако, когда я его запускаю, он выдает эту ошибку:
Error: No such container:path: f0baa241becd20d2690bb901fb257a4bbec8cac17e6f1ce6d50adb9532bbae03:/opt/booking-backup/dump_prod_2019-05-28_14:23.sql
Что делает это еще более странным, так это то, что у меня точно такой же код (но с заменой booking
на abc
и с PSQL вместо MySQL), который работает правильно.
Оказывается, эта строка
docker-compose exec db mysqldump --add-drop-database --add-drop-table --user=root --password = "pw" booking > $docker_backup_path
нет создает выходной файл, но когда я использую tee
, я вижу содержимое дампа, и оно правильное.
Что здесь не так?
Перенаправления оболочки
docker-compose exec db mysqldump ... > "$docker_backup_path"
docker-compose exec db mysqldump ... > "/opt/booking-backup/dump_prod.sql"
# -----------------------------------^ here
... будет расширен вашей оболочкой местный, а не внутри контейнера. Это означает, что файлы записываются в вашу локальную файловую систему, а не в файловую систему контейнера.
Нвм, у меня была опечатка. Я хочу сказать: файлы не будут создаваться в контейнере, они будут созданы в вашей локальной системе.
Я только что попробовал, но получил следующее сообщение:
docker cp /opt/booking-backup/dump_prod_2019-05-29_08:13.sql /root/backup_scripts/booking_prod/dump_prod_2019-05-29_08:13.sql must specify at least one container source
может быть, есть способ перенаправить перенаправления оболочки в контейнер докера?