首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否将远程mysql服务器的ssh隧道暴露给其他容器?

是否将远程mysql服务器的ssh隧道暴露给其他容器?
EN

Stack Overflow用户
提问于 2019-07-30 21:40:23
回答 2查看 1.2K关注 0票数 0

我想使用Docker进行本地web开发,并遵循了不同的教程。我们只能通过ssh隧道访问mysql服务器。我想把这一部分放到一个特殊的容器中,只负责设置到mysql服务器的ssh隧道,然后其他容器就可以像连接本地mysql服务器一样连接到该容器。我认为这比每个通过ssh连接的容器本身更有意义。或者这是个更好的主意?

我偶然发现了这个Docker-image:https://hub.docker.com/r/dogstudio/remote-ssh,但它不能为我工作,所以我自己尝试了一下。

到目前为止,我已经成功地创建了一个Docker容器,在它的bash shell中,我将调用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:

代码语言:javascript
复制
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:
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-01 21:51:35

它看起来像是用以下命令打开ssh隧道

代码语言:javascript
复制
ssh user@host -4 -L 3307:0.0.0.0:3306 -N -g

(特别是-g标志)

造成了不同。

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

代码语言:javascript
复制
$ mysql -h ssh_mysql -u mysql_user -p -P 3307
票数 2
EN

Stack Overflow用户

发布于 2019-07-30 22:15:40

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

要解决这个问题,你应该像这篇文章中描述的那样:Can I get ip address inside my docker container?

所以就像这样

代码语言:javascript
复制
ssh user@example.com -4 -L 33306:$(awk 'END{print $1}' /etc/hosts):3306 -N

应该能胜任这项工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57273136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档