Как я могу получить SSH туннель от локального докера до удаленной БД, работающей, используя kingsquare и docker-compose - PullRequest
0 голосов
/ 17 октября 2019

Моя новая обязанность - портировать наш проект в докеры. Это означает локальный код на каждом компьютере разработчика с тестовыми данными на промежуточном сервере. На данный момент код находится на том же сервере и, таким образом, использует локальный хост (127.0.0.1) для подключения к базе данных. Докер в настоящее время развертывает и может запускать модульные тесты, которые успешно выполняются в тех случаях, когда БД не требуется.

Я пытался использовать ответы, приведенные здесь: https://github.com/phpmyadmin/docker/issues/99, который не удался в то время имножество разных попыток в конечном итоге привели к попытке создания SSH-туннелей изнутри контейнера ( Как мне пройти этот SSH-туннель от локального докера разработки до промежуточной базы данных ). Я вернулся к попытке использовать сервис, так как другие опции кажутся еще более сложными или ненадежными.

Я вернулся к использованию изображения kingsquare, которое позволяет туннелировать, но я не знаю, что ${SSH_AUTH_SOCK} есть или как его использовать. Я пытался указать его на ключе SSH, но это (вероятно, очевидно) не сработало.

Я включил весь docker-compose.yml, поскольку более ранняя ошибка, которую я не заметил, не включает ссылку на сетьв моем существующем докере (app).

version: '3'
services:
    tunnels:
        image: kingsquare/tunnel
        volumes:
            - '${SSH_AUTH_SOCK}:/ssh-agent'
        command: '*:3306:localhost:3306 -vvv user@[myserver->the IP of the machine hosting the DB?] -i /.ssh/openssh_ironman_justin  -p 2302'
        networks:
            mynetwork:
                aliases:
                    - remoteserver
    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
        networks:
            - mynetwork
networks:
    mynetwork:
        driver: bridge

В файле .env у каждого разработчика есть следующее, что мне нужно изменить после завершения туннеля SSH, чтобы он использовал комбинацию туннель-DB:

DB_HOST=127.0.0.1 # As per answer, this will change to the IP address of the server containing the database.  I'll leave the current localhost reference rather than displaying the IP address of the machine.
DB_PORT=3306
DB_DATABASE=[central database or sharded version for testing data changes]
DB_USERNAME=[username]
DB_PASSWORD=[password]

Я бы хотел иметь возможность получить код в контейнере приложения, способный использовать базу данных на удаленном сервере, с минимальными сложностями после развертывания.

Обновление Я решил проблему с портом.

Обновление 2.5 Если я использую command: '*:3306:localhost:3306 -vvv [username]@[IP of DB host] -i [location on my PC of key file]/openssh_dev -p 2302', тогда он устанавливает соединение, но ему отказывают с помощью:

tunnels_1  | debug1: Trying private key: /.ssh/openssh_ironman_justin
tunnels_1  | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tunnels_1  | @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
tunnels_1  | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tunnels_1  | Permissions 0755 for '/.ssh/openssh_dev ' are too open.
tunnels_1  | It is required that your private key files are NOT accessible by others.
tunnels_1  | This private key will be ignored.

Но как мне изменить права доступа для смонтированного файла? Это можно сделать через Dockerfile, или оно должно уже присутствовать до того, как оно начнется?

Ответы [ 2 ]

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

Но как мне изменить права доступа для смонтированного файла? Это можно сделать через Dockerfile или он должен присутствовать до его запуска?

Dockerfile используется для создания образа. Контейнер на основе этого образа монтирует каталог с вашего хост-компьютера и поддерживает те же разрешения хоста.

Вы можете изменить разрешения файла на вашем хосте, Docker будет использовать те же разрешения в контейнере.

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

Для вашего докера контейнер 127.0.0.1 является его локальным хостом. Для доступа к хост-машине вам необходимо изменить хост на 0.0.0.0. С другой стороны, если вы хотите подключиться к удаленному хосту, тогда это будет your-host-ip-or-domain.com.

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