您如何使用 运行 tar 命令将 docker 容器内的文件夹备份到主机?
How do you run a tar command to backup a folder inside a docker container to the host?
我的 docker 容器有一个我想定期备份到主机的目录。
我认为命令应该是这样的:
docker-compose exec SERVICE_NAME tar -czf - -C /dir/to/backup . > backup.tar.gz
这应该会在主机上创建一个名为 backup.tar.gz
的文件。
相反,tar
检测到输出似乎要发送到终端,并出现错误:
tar: Refusing to write archive contents to terminal (missing -f option?)
tar: Error is not recoverable: exiting now
据我所知,tar
命令没有 --force
或类似的东西。
有正确的方法吗?
这里有两种方法:
您可以使用 -T
选项告诉 docker compose 不分配 pty。
示例:
docker-compose exec -T SERVICE_NAME tar -czf - -C /dir/to/backup . > backup.tar.gz
pty 的存在是大多数程序(包括 tar)检测它们是 运行 在终端中还是附加到管道的方式。
您可以通过使用 /dev/stdout
代替 -
来欺骗 tar 将输出写入终端。
示例:
$ tar -czf /dev/stdout etc/
这使得 tar 将存档写入标准输出。请记住,此限制 exists for a reason.
我的 docker 容器有一个我想定期备份到主机的目录。
我认为命令应该是这样的:
docker-compose exec SERVICE_NAME tar -czf - -C /dir/to/backup . > backup.tar.gz
这应该会在主机上创建一个名为 backup.tar.gz
的文件。
相反,tar
检测到输出似乎要发送到终端,并出现错误:
tar: Refusing to write archive contents to terminal (missing -f option?)
tar: Error is not recoverable: exiting now
据我所知,tar
命令没有 --force
或类似的东西。
有正确的方法吗?
这里有两种方法:
您可以使用
-T
选项告诉 docker compose 不分配 pty。示例:
docker-compose exec -T SERVICE_NAME tar -czf - -C /dir/to/backup . > backup.tar.gz
pty 的存在是大多数程序(包括 tar)检测它们是 运行 在终端中还是附加到管道的方式。
您可以通过使用
/dev/stdout
代替-
来欺骗 tar 将输出写入终端。示例:
$ tar -czf /dev/stdout etc/
这使得 tar 将存档写入标准输出。请记住,此限制 exists for a reason.