S SH Туннель от Docker Контейнер - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно S SH Туннель в мою сеть университетов для работы над проектом через базу данных MySQL (в отличие от физического присутствия в школе и использования сети).

Я могу получить доступ к сервер со следующими инструкциями (или через удаленный проводник VSCode):

ssh -L 4444:abc.university.ca:443 login.university.ca

ssh -p 4444 'your_username'@localhost

, и мне предлагается ввести мой пароль.

Я также могу подключиться к базе данных из MySQL Workbench S SH Tunnel.

Однако я хочу разрабатывать локально на своей машине.

Я настроил Docker Контейнер с сервером Apache PHP, поэтому я не мне нужно вручную скопировать мои файлы на сервер через терминал.

Dockerfile

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"

Затем я пытаюсь соединиться с базой данных через соединение. 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());
}
?>

Моя проблема заключается в том, что когда я устанавливаю sh туннель S SH через терминал, мое приложение в контейнере 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

Мой вопрос: как я могу открыть туннель S SH из моего контейнера, чтобы мой локальный сервер apache - php мог подключиться к базе данных, которая в сети моей школы?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Ну, я думаю, что вы, вероятно, предпочли бы использовать VPN, , а не туннель "S SH", но в любом случае сетевое соединение будет окружающим: , то есть «задает c для среды хоста, а не для иллюзии Docker».

Если туннель предоставляет определенный c известный «IP-адрес хоста», то Docker Мост-сеть сможет добраться до него.

0 голосов
/ 02 апреля 2020

Чтобы помочь с несколькими прыжками и пересылкой, в вашем .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 сокет для mysql) на порт 3306 от вашего docker контейнер для использования локальных перенаправлений на удаленный сервер.

Другие советы по настройке для .ssh / config для меньшей аутентификации:

ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 600
ServerAliveInterval 39
...