2017-02-12 12 views
4

Когда я пытаюсь подключиться через SSH к Host Mashine (vServer), а затем попытаюсь подключиться через внутренний докер Container-IP, тогда я не могу подключиться к MySQL.Как подключиться к контейнеру Docker MySQL через SSH?

Это мой файл для докеры.

version: '2' 
services: 
    mysql: 
    build: ./mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: test 
    volumes: 
     - ./db:/var/lib/mysql 

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

version: '2' 
services: 
    mysql: 
    build: ./mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: test 
    volumes: 
     - ./db:/var/lib/mysql 
    ports: 
    - 3306:3306 

Тогда я могу подключиться через Host IP к MySQL, но это без SSH прямо через TCP и порт. Это не-Go для меня, чтобы привести службу MySQL в Интернет.

Причины можно найти здесь https://security.stackexchange.com/questions/63881/is-it-not-safe-to-open-mysqls-port-to-the-internet Почему это неправдоподобно принести ваш порт mysql в Интернет.


Так что это хорошая практика, чтобы подключиться к Docker тузд контейнер с SSH, но держать закрытыми порты MySQL?

ответ

7

Один простой способ - связать порт MySQL только с адресом localhost. Это предполагает, что у хоста есть клиент mysql, доступный вне Docker.

ports: 
    - 127.0.0.1:3306:3306 

Вы также можете опустить ports раздел полностью (ни один порт не обязательным на всех), и использовать клиент MySQL, который уже внутри контейнера.

docker-compose exec mysql bash 

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

+1

Первое предложение исправило это для меня, теперь я могу подключиться через HeidiSQL через SSH к моему MySQL-контейнеру без особых усилий. Второе предложение полезно для небольших вещей, но мне нравится мой графический интерфейс HeidiSQL. – TatzyXY

3

Простой способ для достижения этой цели является направить SSH порт Docker conatiner в какой-то порт на хосте, т.е.

ports: 
    - 22:<some free host port> 

, а затем получить доступ к контейнеру на хост-порт, который используется через SSH. Обратите внимание, что неплохо использовать порт 22, так как это вызовет конфликт с сервером ssh, запущенным на вашем хосте.

+0

Это хороший ответ, но его немного переборщик для моей цели на данный момент. Затем мне нужно закрепить службу ssh и сделать ее доступной для других контейнеров. Сначала я останусь с ответом Дэна Лоу, но когда проект станет больше, ваш ответ, может быть, и пойдет. – TatzyXY

+0

Нет необходимости докерезировать ssh. Вы можете просто получить доступ к контейнеру через 'ssh localhost: <некоторый свободный порт>' –

+0

@TobiasGuggenmos Только в том случае, если сервер sshd прослушивает внутри контейнера, чего нет в большинстве контейнеров. –