Как мне пройти этот SSH-туннель от локального докера разработки до промежуточной базы данных - PullRequest
0 голосов
/ 16 октября 2019

Я могу создать докер, содержащий код моего проекта. У него есть модульные тесты, которые не проходят, потому что нет соединения с базой данных. Я могу войти на сервер с центральной базой данных, содержащей наши тестовые данные, используя ключ SSH и учетные данные. Я не могу установить соединение между докером и БД.

За последние два дня я пробовал несколько разных предложений, выцарапывая и перезапуская эту часть файла Dockerfile. Я искал на YouTube учебники, Stackexchange - для ответов и форумы докеров - для справки.

Если есть пошаговое руководство, оно спрятано, я бы тоже хотел это увидеть!

Docker-compose имеет следующее:

services:
  app:
    build:
      context: .
      dockerfile: .docker/Dockerfile
      args:
        APP_PATH: ${APP_PATH}
    image: laravel-docker
    env_file: .env
    ports:
      - 8080:80
      # We need to expose 443 port for SSL certification.
      - "443:443"
    volumes:
      - .:/var/www/jumbledown

Внутри контейнера я могу связаться с хостом удаленной БД следующим образом: ssh -4 -R 8888:localhost:8888 [devname]@NN.NN.NN.NN -i ~/ident -p [portnumber] где: - devname - мой логин. - NN.NN.NN.NN - IP-адрес хоста БД. - id - это файл, содержащий ключ SSH, который копируется с помощью команды копирования, содержащейся в Dockerfile.

Файл Docker собран из FROM php:7.1.8-apache и теперь устанавливает МНОГО дополнительных компонентов, включая Xdebug. Слишком долго просто копировать и вставлять, и я не уверен, какие части актуальны;Я могу предоставить по запросу.

В идеале, я хотел бы иметь возможность использовать Dockerfile для настройки SSH-туннеля, обслуживающего БД в док-контейнере. Прямо сейчас я бы согласился с возможностью вручную установить соединение внутри контейнера.

Обновление В соответствии с вопросами в ответе, конечный результат, который мне нужно создать, состоит из несколькиху разработчиков должны быть локальные докеры, а у каждого - туннель к центральной базе данных, содержащей данные тестирования, для нашего использования, пока мы пишем код в течение дня.

1 Ответ

0 голосов
/ 16 октября 2019

Если вы хотите, чтобы у контейнера PHP был постоянный SSH-туннель к вашей удаленной БД, вы можете изменить свой оператор COMMAND в Dockerfile (предполагая, что ENTRYPOINT является оболочкой), чтобы использовать сценарий, который создает туннель SSH вфон, аналогично тому, что вы вручную, дождитесь туннеля SSH и затем продолжите запускать то, что вы хотите запустить.

В вашем вопросе отсутствуют детали того, что вы пытаетесь достичь (только постоянный туннель? во время тестирования? и т. д.)

Пример такого скрипта:

# run ssh in background (notice the "&" at the end)
ssh -4 -R 8888:localhost:8888 $DB_USERNAME@$DB_HOST -i ~/ident -p $DB_PORT &

# wait for the ssh tunnel if needed
# ...

# run the main command here
# ...

Я бы посоветовал рассмотреть другой путь -
Создать новый сервис в файле docker-composeон предназначен для открытия туннеля и последующего подключения к этому сервису из службы PHP.

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