docker - 使用 docker 容器作为网络内的 SSH 隧道
问题描述
我正在尝试使用 docker 容器来设置到远程数据库的 SSH 隧道,该远程数据库只能通过 SSH 访问。我有一个包含多个容器的 docker 网络,并希望使数据库可用于网络中的所有容器。
SSH 容器的 Dockerfile 如下所示:
FROM debian:stable
RUN apt-get update && apt-get -y --force-yes install openssh-client autossh postgresql-client
COPY .ssh /root/.ssh
RUN chown root:root /root/.ssh/config
EXPOSE 12345
ENTRYPOINT ["/usr/bin/autossh", "-M", "0", "-v", "-T", "-N", "-4", "-L", "12345:localhost:1234", "user@remotedb" ]
.ssh 目录里面是我的密钥和配置文件,看起来像这样:
Host remotedb
StrictHostKeyChecking no
ServerAliveInterval 30
ServerAliveCountMax 3
隧道本身在这个容器上工作,这意味着我可以从它内部以 localhost:12345 的身份访问数据库。
现在我也想从同一网络中的其他容器访问它。
我的 docker-compose.yml 看起来像这样(我注释掉了一些试验):
version: '2'
networks:
my_network:
driver: bridge
ipam:
config:
- subnet: 10.12.0.0/16
gateway: 10.12.0.1
services:
service_1:
image: my/image:alias
volumes:
- somevolume
# links:
# - my_ssh
ports:
- "8080"
environment:
ENV1: blabla
networks:
my_network:
ipv4_address: 10.12.0.12
my_ssh:
build:
context: ./dir_with_Dockerfile
# ports:
# - "23456:12345"
expose:
- "12345"
networks:
my_network:
ipv4_address: 10.12.0.13
我尝试使用主机名“my_ssh”、ipv4_address、“localhost”以及端口 12345 和 23456 从 service_1 内部访问远程数据库。这些组合都不起作用。我哪里错了?
或者我还能如何实现从容器到远程数据库的永久连接?
解决方案
与其说是答案,不如说是建议;在您的数据库网络和 docker swarm 上设置 OpenVPN 将允许您将两个网络连接在一起。它还将使您将来更容易配置更多主机。
推荐阅读
- asp.net-core - .NET Core SignalR 客户端未连接到 ASP.NET Core 集线器
- sql - 选择查询以根据列值检索单行多值
- php - 当表中的 tr 为空时更改颜色
- r - R中的情节:每个类别的特定颜色
- java - 文件树中的复选框
- rest - 如何使用 Tensorflow REST API 在对象检测中正确构建请求 json?
- html - 如何访问 django-admin 页面并对其进行扩展?
- google-calendar-api - 如何解决在 Google 日历上不可见的全天事件的问题?
- php - 从一个读取并写入另一个 csv 文件 - PHP
- c++ - 可以将指针放在堆内存(C++)上吗?