docker 容器如何通过主机上的 ssh 隧道访问 (mongo-db) 服务
How could a docker container access a (mongo-db) service via an ssh tunnel on host
我正在尝试连接到远程 mongo-db 实例,该实例对其本地网络的访问受到限制。所以,我创建了一个 ssh 隧道,它允许我连接:
ssh -L [port]:localhost:[hostport] [username]@[remote-ip]
但是,当我想从 docker 容器连接到同一个 mongo-db 服务时,连接超时。
我试过这样
ssh -L 172.17.0.1:[port]:localhost:[host-port] [username]@[remote-ip]
并从位于 172.17.0.1:[port] 的 docker 容器连接到远程 mongo-db,但没有成功。我的错误是什么?
注意: 我正在寻找适用于 Linux 和 Mac 的解决方案。
我的建议是这样的:
version: "3"
services:
sshproxy:
image: docker.io/alpine:latest
restart: on-failure
volumes:
- ./id_rsa:/data/id_rsa
command:
- sh
- -c
- |
apk add --update openssh
chmod 700 /data
exec ssh -N -o StrictHostkeyChecking=no -i /data/id_rsa -g -L 3128:localhost:3128 alice@remotehost.example.com
client:
image: docker.io/alpine:latest
command:
- sh
- -c
- |
apk add --update curl
while :; do
curl -x http://sshproxy:3128 http://worldtimeapi.org/api/timezone/America/New_York
sleep 5
done
我在这里设置了一个 ssh 隧道,提供对远程服务器的访问
http 代理,然后在另一个容器中我正在访问该代理
通过 ssh 隧道。这几乎正是您想要用 mongodb.
做的
在真实环境中,您可能会使用 pre-built 图像,而不是像我在本例中所做的那样安装包 on-the-fly。
我正在尝试连接到远程 mongo-db 实例,该实例对其本地网络的访问受到限制。所以,我创建了一个 ssh 隧道,它允许我连接:
ssh -L [port]:localhost:[hostport] [username]@[remote-ip]
但是,当我想从 docker 容器连接到同一个 mongo-db 服务时,连接超时。
我试过
ssh -L 172.17.0.1:[port]:localhost:[host-port] [username]@[remote-ip]
并从位于 172.17.0.1:[port] 的 docker 容器连接到远程 mongo-db,但没有成功。我的错误是什么?
注意: 我正在寻找适用于 Linux 和 Mac 的解决方案。
我的建议是这样的:
version: "3"
services:
sshproxy:
image: docker.io/alpine:latest
restart: on-failure
volumes:
- ./id_rsa:/data/id_rsa
command:
- sh
- -c
- |
apk add --update openssh
chmod 700 /data
exec ssh -N -o StrictHostkeyChecking=no -i /data/id_rsa -g -L 3128:localhost:3128 alice@remotehost.example.com
client:
image: docker.io/alpine:latest
command:
- sh
- -c
- |
apk add --update curl
while :; do
curl -x http://sshproxy:3128 http://worldtimeapi.org/api/timezone/America/New_York
sleep 5
done
我在这里设置了一个 ssh 隧道,提供对远程服务器的访问 http 代理,然后在另一个容器中我正在访问该代理 通过 ssh 隧道。这几乎正是您想要用 mongodb.
做的在真实环境中,您可能会使用 pre-built 图像,而不是像我在本例中所做的那样安装包 on-the-fly。