我在本地计算机上为postgres创建了一个docker卷。
docker create volume postgres-data
然后我使用了这个卷并运行了一个docker。
docker run -it -v postgres-data:/var/lib/postgresql/9.6/main postgres
之后我做了一些数据库操作,这些操作自动存储在postgres-data中。现在我想将该卷从本地计算机复制到另一台远程计算机。怎么做。
注意 - 数据库大小非常大
答案 0 :(得分:7)
如果第二台机器启用了SSH,您可以使用第一台机器上的Alpine容器映射卷,将其捆绑并发送到第二台机器。
看起来像这样:
docker run --rm -v <SOURCE_DATA_VOLUME_NAME>:/from alpine ash -c "cd /from ; tar -cf - . " | ssh <TARGET_HOST> 'docker run --rm -i -v <TARGET_DATA_VOLUME_NAME>:/to alpine ash -c "cd /to ; tar -xpvf - "
您需要更改:
或者,您可以尝试使用此帮助程序脚本https://github.com/gdiepen/docker-convenience-scripts
希望这有帮助。
答案 1 :(得分:3)
我有一个完全相同的问题,但就我而言,两个卷都位于单独的VPC中,并且无法将SSH暴露给外界。我最终创建了dvsync,它使用ngrok在它们之间创建了一个隧道,然后使用rsync over SSH复制了数据。根据您的情况,您可以在计算机上启动dvsync-server
:
$ docker run --rm -e NGROK_AUTHTOKEN="$NGROK_AUTHTOKEN" \
--mount source=postgres-data,target=/data,readonly \
quay.io/suda/dvsync-server
,然后在目标计算机上启动dvsync-client
:
docker run -e DVSYNC_TOKEN="$DVSYNC_TOKEN" \
--mount source=MY_TARGET_VOLUME,target=/data \
quay.io/suda/dvsync-client
可以在ngrok dashboard中找到NGROK_AUTHTOKEN
,并且DVSYNC_TOKEN
在其标准输出中显示dvsync-server
。
同步完成后,dvsync-client
容器将停止。