【问题标题】:Bash: file not created with '>' commandBash:文件不是用“>”命令创建的
【发布时间】:2019-05-28 14:28:41
【问题描述】:

我正在编写一个脚本来创建在 docker 容器中运行的 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 时,我可以看到转储的内容并且它们是正确的。

这里出了什么问题?

【问题讨论】:

    标签: mysql bash shell docker docker-compose


    【解决方案1】:

    shell 重定向

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

    ... 将由您的 local shell 扩展,而不是在容器内。这意味着文件将写入您的本地文件系统而不是容器的文件系统。

    【讨论】:

    • 我只是试了一下,但收到了这条消息: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 是否有办法将 shell 重定向重定向到 docker 容器?
    • Nvm,我有一个错字。我想说的是:文件不会在容器中创建,它们将在您的本地系统上创建
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多