Настройка ssh туннеля из контейнера докера на macos Mojave 10.14 - PullRequest
0 голосов
/ 13 декабря 2018

У меня проблемы с настройкой туннеля ssh на моем компьютере Mac.У меня нет проблем с настройкой туннеля на моем Ubuntu Box.Это команда, которую я запускаю

ssh -nNT -L 172.18.0.1:4000:production-database-url:3306 jump-point

Когда я запускаю это на своем Mac, я получаю следующую ошибку:

bind [172.18.0.1]:4000: Can't assign requested address
channel_setup_fwd_listener_tcpip: cannot listen to port: 4000 Could
not request local forwarding.

Если я запускаю без адреса bind_address(172.18.0.1), я могу подключиться к базе данных через туннель.

Если я связываюсь со всеми интерфейсами (0.0.0.0), то туннель открыт, однако соединение с базой данных изнутриДокер контейнер не работает.

1 Ответ

0 голосов
/ 02 августа 2019

172.18.0.1 - это IP-адрес сетевого шлюза по умолчанию для докера , а не IP вашего хоста.
Вы можете выполнить эту команду, чтобы проверить это.

$ docker network inspect bridge

Docker для Mac имеет ограничений

  • В macOS нет моста docker0 (он находится в хосте Docker VM на Mac и в Windows)
  • Вы не можете пропинговать контейнеры (не сбривая кучу яков)
  • IP-адресация для каждого контейнера невозможна

Также обратите внимание, что это означает, что опция запуска докера --net-host не поддерживаетсяна Mac, но, возможно, это хорошо

Есть обходной путь

  • Эти магические адреса разрешаются на IP хоста из контейнера
    • docker.for.mac.localhost (устарело)
    • docker.for.mac.host.internal (устарело)
    • host.docker.internal
  • Это разрешает шлюз хоста mac
    • gateway.docker.internal

Используйте имя host.docker.internal внутри контейнера, как если бы вы использовали localhost на mac напрямую.

Не беспокойтесь об адресе привязки для туннеля:

ssh -nNT -L 4000:production-database-url:3306 jump-point

Вы не упомянули, какая база данных, но я беру ее с порта 3306, что это MySQL.

Для подключения с помощью mysql cli из контейнера, через туннель ssh на вашем хосте.Для удаленного сервера баз данных MySQL вы можете запустить:

mysql --host host.docker.internal [... other options go here]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...