首页 > 解决方案 > 如何从 Docker 容器 SSH 到远程服务器

问题描述

我正在从 postgres 图像中构建一个 docker 图像,我想用一些数据来播种它。

我正在关注文档的初始化脚本部分。

但我现在面临的问题是,我的初始化脚本需要 ssh 到远程数据库并从那里获取哑数据。基本上是这样的:

ssh remote.host "pg_dump -U user -d somedb" > some.sql

但这失败并出现错误ssh: command not found

现在的问题是,一般来说,我如何从 docker 容器 ssh 到远程服务器。在这种情况下,具体来说,作为播种 postgres 数据库的初始化步骤的一部分,我如何从 docker 容器 ssh 到远程数据库服务器?

标签: postgresqldockerssh

解决方案


作为一般规则,您不会以这种方式做事。典型的 Docker 映像包含它们正在运行的服务器和一些核心工具,但网络客户端喜欢sshcurl通常不属于其中的一部分。在特定情况下ssh,安全管理所需的凭据也很棘手(并非不可能,但并不明显)。

在您的特定情况下,我可能会重新安排一些事情,以便您的脚本没有硬假设数据库在本地运行。预配一个空数据库容器,然后从针对该空数据库的主机运行脚本。甚至可以将环境变量PGHOSTPGPORT环境变量设置为指向主机的主机名和发布数据库接口的端口,然后不加修改地运行该脚本。

仔细查看该特定命令,您还可能会发现最好设置一个 cron 作业来运行该特定数据库转储并将内容放在某处。然后,开发人员无需连接到实时数据库服务器即可获得数据的快照,并且您可以限制可以访问的人数。一旦你有了这个转储文件,你就可以使用这个/docker-entrypoint-initdb.d机制来让它在第一次启动时被加载。


推荐阅读