![](/img/trans.png)
[英]How to reverse SSH tunnel to remote docker container for Xdebug?
[英]SSH Tunnel from Docker Container
我需要通過 SSH 隧道連接到我的大學網絡,才能通過 MySQL 數據庫開展項目(而不是實際在學校和使用網絡)。
我可以使用以下說明(或通過 VSCode 遠程資源管理器)訪問服務器:
ssh -L 4444:abc.university.ca:443 login.university.ca
ssh -p 4444 'your_username'@localhost
並提示他們輸入我的密碼。
我還可以從 MySQL Workbench SSH Tunnel 連接到數據庫。
但是我想在我的機器上本地開發。
我已經使用 Apache PHP 服務器設置了一個 Docker 容器,因此我不必通過終端手動將我的文件復制到服務器。
文件
FROM php:7.2-apache
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
#get mysqli
RUN docker-php-ext-install mysqli
COPY src/ /var/www/html/
docker-compose.yml
version: "3.2"
services:
web:
build: php-apache
container_name: php-apache-server
ports:
- "8080:80"
然后我嘗試通過 connection.php 與數據庫連接
<?php
/* DB Credentials */
$DB_SERVER = 'xxxxxxxxxxxx';
$DB_USERNAME = 'xxxxxxxxxx';
$DB_PASSWORD = 'xxxxxxxx';
$DB_NAME = 'xxxxxxxxx';
$PORT = xxxx;
/* Attempt to connect to MySQL database */
$link = mysqli_connect($DB_SERVER, $DB_USERNAME, $DB_PASSWORD, $DB_NAME);
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>
我的問題是當我通過終端建立 SSH 隧道時,我在 Docker 容器中的應用程序無法連接到 MySQL 數據庫。 我正進入(狀態:
PHP Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /var/www/html/connection.php on line 11
我的問題是,如何從我的容器內打開 SSH 隧道,以便我的本地 apache-php 服務器可以連接到我學校網絡上的數據庫?
好吧,我認為您可能更喜歡使用VPN,而不是“SSH 隧道”,但無論如何,網絡連接都將是環境的:也就是說,“特定於主機環境,而不是 Docker錯覺。”
如果隧道公開了一個特定的已知“主機 IP 地址”,那么 Docker 橋接網絡將能夠訪問它。
為了幫助多跳和轉發,在你的 .ssh/config
host uni
hostname login.university.ca
user some_user
host abc
hostname abc.university.ca
port 443
ProxyJump uni
LocalForward localhost:3306 /var/lib/mysql/mysql.sock
然后$DB_SERVER=127.0.0.1
( localhost
表示本地 unix socket 到 mysql)從你的 docker 容器到端口 3306 以利用本地轉發到遠程服務器。
.ssh/config 的其他配置提示以減少身份驗證:
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 600
ServerAliveInterval 39
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.