使用docker容器作为网络

时间:2018-06-08 13:41:49

标签: docker docker-compose openssh autossh

我正在尝试使用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 diretctory里面是我的密钥和配置文件,看起来像这样:

Host remotedb
    StrictHostKeyChecking   no
    ServerAliveInterval     30
    ServerAliveCountMax     3

隧道本身适用于此容器,这意味着我可以从其中访问db作为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内部访问远程数据库。这些组合都不起作用。我哪里可能出错?

或者我怎样才能实现从容器到远程数据库的永久连接?<​​/ p>

1 个答案:

答案 0 :(得分:0)

更多的建议而不是答案;在您的数据库网络上设置OpenVPN,您的docker swarm将允许您将两个网络连接在一起。它还可以让您以后更轻松地配置更多主机。