我在本地机器上为Postgres创建了一个Docker卷。
docker create volume postgres-data
然后我使用这个卷并运行了一个Docker。
docker run -it -v postgres-data:/var/lib/postgresql/9.6/main postgres
之后我进行了一些数据库操作,这些操作自动存储在postgres-data中。现在我想将该卷从我的本地机器复制到另一台远程机器上。如何做到。
注意 - 数据库大小非常大
我在本地机器上为Postgres创建了一个Docker卷。
docker create volume postgres-data
然后我使用这个卷并运行了一个Docker。
docker run -it -v postgres-data:/var/lib/postgresql/9.6/main postgres
之后我进行了一些数据库操作,这些操作自动存储在postgres-data中。现在我想将该卷从我的本地机器复制到另一台远程机器上。如何做到。
注意 - 数据库大小非常大
在第一台机器上运行以下命令:
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
希望这可以帮到您。
sudo:没有tty present和no askpass程序指定write / dev / stdout:broken pipe
- murli2308docker run --rm -v <SOURCE_DATA_VOLUME_NAME>:/from alpine ash -c "cd /from ; tar -cfz - . " | ssh <TARGET_HOST> 'docker run --rm -i -v <TARGET_DATA_VOLUME_NAME>:/to alpine ash -c "cd /to ; tar -xpvfz - "
。 - Simon I'
,否则它可以正常工作。在复制卷之前,请确保目标容器已停止。 - Peter Theill我曾经有过完全相同的问题,但在我的情况下,两个卷位于不同的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_AUTHTOKEN
可以在 ngrok 控制面板 中找到,DVSYNC_TOKEN
则会在 dvsync-server
的 stdout 中显示。
同步完成后,dvsync-client
容器将停止运行。