Bash: файл не создан с помощью команды «>»

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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 может быть, есть способ перенаправить перенаправления оболочки в контейнер докера?

Jessica Chambers 29.05.2019 10:14

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

hek2mgl 29.05.2019 10:15

Другие вопросы по теме