Bash: файл не создан командой '>' - PullRequest
0 голосов
/ 28 мая 2019

Я пишу скрипт для создания резервных копий базы данных 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, я вижу содержимое дампа, и оно корректно.

Что здесь не так?

1 Ответ

0 голосов
/ 29 мая 2019

Перенаправления оболочки

docker-compose exec db mysqldump ... > "$docker_backup_path"
docker-compose exec db mysqldump ... > "/opt/booking-backup/dump_prod.sql"
# -----------------------------------^ here

... будут расширяться вашей локальной оболочкой, а не внутри контейнера.Это означает, что файлы записываются в вашу локальную файловую систему, а не в файловую систему контейнера.

...