【发布时间】:2019-12-07 22:23:21
【问题描述】:
我想使用 Docker 进行本地 Web 开发,并为此遵循了不同的教程。我们只能通过 ssh 隧道访问 mysql 服务器。 我想把那部分放到一个特殊的容器中,只负责设置到 mysql 服务器的 ssh 隧道,然后其他容器可以连接到该容器,就好像它是本地 mysql 服务器一样。我认为这比通过 ssh 连接的每个容器本身更有意义。 或者这会是一个更好的主意吗?
我遇到了这个 Docker 镜像: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:
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:
【问题讨论】:
-
“很遗憾,我无法从另一个容器连接到 mysql 服务器,我总是收到错误消息...”此时您正在运行什么实际命令,或者您具体在做什么哪个失败了?你得到什么具体的错误信息?您如何指定要连接的主机名和端口?
-
对于任何对这个问题感兴趣的人:似乎用
ssh user@host -4 -L 3307:0.0.0.0:3306 -N -g(0.0.0.0和0.0.0.0和-g标志)打开ssh隧道会有所不同......然后我能够从其他容器调用mysql -h "IP-address of container" -u mysql_user -p -P 3307。
标签: mysql docker ssh ssh-tunnel