将ssh隧道公开到远程mysql服务器到其他容器?

时间:2019-07-30 13:40:22

标签: mysql docker ssh ssh-tunnel

我想使用Docker进行本地Web开发,并遵循不同的教程。我们只能通过ssh隧道访问mysql服务器。 我想将这部分放入一个特殊的容器中,仅负责建立通往mysql服务器的ssh隧道,然后其他容器可以连接到该容器,就好像它是本地mysql服务器一样。我认为这比每个通过ssh自己连接的容器更有意义。 还是一个更好的主意?

我遇到了这个Docker映像:https://hub.docker.com/r/dogstudio/remote-ssh,但是无法为我工作,所以我自己尝试了。

到目前为止,我设法创建了一个Docker容器,并在其bash外壳中调用了ssh user@example.com -4 -L 33306:127.0.0.1:3306 -N,之后便可以通过mysql -h 127.0.0.1 -P 33306 -u user -p连接到远程mysql服务器。

然后我进入另一个Docker容器(php)的bash并尝试调用mysql -h ssh_mysql -P 33306 -u user -p。 不幸的是,我总是收到错误ERROR 2003 (HY000): Can't connect to MySQL server on 'ssh_mysql' (111 "Connection refused")

我尝试了很多,例如,这里的解释是:https://superuser.com/questions/588591/how-to-make-ssh-tunnel-open-to-public,但可能是我做错了或误解了。

我的docker-compose.yml:

version: "2.1"

services:
    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - "${PROJECT_ROOT}:/var/www/html:ro"
        networks:
            - server
        depends_on:
            - php

    php:
        build: ./php/
        expose:
            - 9000
        links:
            - ssh_mysql
        volumes:
            - "${PROJECT_ROOT}:/var/www/html"
            - "${SSH_FOLDER}:/root/.ssh"
        networks:
            - database
            - server
        depends_on:
            - ssh_mysql

    ssh_mysql:
        build: ./mysql/
        expose:
            - 33306
        networks:
            - database
        volumes:
            - "${SSH_FOLDER}/id_rsa:/root/.ssh"

volumes:
    data:

networks:
    database:
    server:

2 个答案:

答案 0 :(得分:0)

因此,您的问题是将SSH隧道绑定到127.0.0.1,因此将localhost和localhost仅用于具有SSH隧道的容器,因此您可以从该容器内部访问隧道,而不能从其他容器访问隧道。

要解决此问题,您应该执行本文中所述的操作:Can I get ip address inside my docker container?

类似

ssh user@example.com -4 -L 33306:$(awk 'END{print $1}' /etc/hosts):3306 -N

应该做这项工作。

答案 1 :(得分:0)

似乎用来打开ssh-tunnel

ssh user@host -4 -L 3307:0.0.0.0:3306 -N -g

(尤其是-g标志)

与众不同...

然后,我可以通过调用以下容器通过另一个容器的SSH隧道访问远程服务器上的MySQL数据库:

$ mysql -h ssh_mysql -u mysql_user -p -P 3307