gpt4 book ai didi

mysql - docker 、PHP-FPM、MySql : connection to a remote DB from container using an ssh tunnel

转载 作者:行者123 更新时间:2023-11-30 21:46:04 26 4
gpt4 key购买 nike

我们最近将我们的 php api 移到了一个 docker 容器中,我正在尝试连接到一个需要 ssh 隧道的远程数据库。我已经搜索过但找不到可行的答案,也许我想偷工减料,我不确定。这是新的。

当我通过我的 mysql gui 客户端连接到数据库时,ssh 隧道只需要密码,不需要公钥。虽然我读到这不是最安全的方法,但我在我的构建中使用了 sshpass。

我们使用 Aura/SQL 作为 PDO 库,它在容器配置运行时建立连接。当它在同一台服务器上时,它在 api 内部运行良好。我不确定 Aura 如何知道 ssh 连接。

这是我的 Dockerfile:

# version
FROM php:7.2.3-fpm

RUN apt-get update && \
apt-get install -y procps git libssh2-1 libssh2-1-dev sshpass && \
pecl install ssh2-1.1.2 && \
docker-php-ext-enable ssh2 && \
docker-php-ext-install pdo pdo_mysql && \
sshpass -p 'XXXXXXXXX' ssh -o StrictHostKeyChecking=no -L 3306:localhost:3306 username@mysite.com

WORKDIR ./api
ADD ./ ./

ADD ./www.conf /usr/local/etc/php-fpm.d/www.conf

在构建时,我没有收到任何错误,只是一个警告,指出 known_hosts 已更新并且终端未打开,有些是这样的。

当我尝试访问需要数据库连接的端点时,我得到:

SQLSTATE[HY000] [2002] 连接被拒绝

我正在尝试做的事情是可行的,还是我需要一个单独的容器,像这样: https://hub.docker.com/r/kingsquare/tunnel/https://docs.docker.com/samples/library/mysql/

谢谢 - D

最佳答案

我认为您需要做的是在启动容器后运行 ssh 隧道命令。

  1. 从 docker 文件中删除 sshpass 命令
  2. 使用 docker run 启动您的容器(或者您可以使用 docker-compose)
  3. 使用 docker exec --detach YOUR_CONTAINER_NAME sshpass -p 'XXXXXXXXX' ssh -o StrictHostKeyChecking=no -L 3306:localhost:3306 username@mysite.com 在正在运行的容器上运行 ssh 隧道命令

另一种解决方案是将您的命令包装在一个 bash 脚本中并将其放入 Dockerfile CMD ./my_wrapper_script.sh 参见 link .

关于mysql - docker 、PHP-FPM、MySql : connection to a remote DB from container using an ssh tunnel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49437825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com