Подключиться к Docker sqlserver через SSH - PullRequest
0 голосов
/ 06 июля 2018

Я создал Docker-контейнер, содержащий базу данных mssql. В командной строке ip a дает ip-адрес для контейнера, однако при попытке ssh в него username@docker_ip_address выдает ssh: connect to host ip_address port 22: Connection refused. Поэтому мне интересно, смогу ли я вообще использовать ssh в контейнере, чтобы мне не всегда приходилось использовать инструмент докера docker exec ...., и если да, то как мне это сделать?

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

По сути, измените ваш Dockerfile на что-то вроде следующего - это установит openssh-сервер, изменит запретительные конфигурации по умолчанию и запустит службу:

# FROM a-image-with-mssql
RUN echo "root:toor" | chpasswd
RUN apt-get update
RUN apt-get install -y openssh-server
COPY entrypoint.sh .
RUN cd /;wget https://gist.githubusercontent.com/spekulant/e04521d6c6e1ccffbd3455c673518c5b/raw/1e4f6f2cb32caf3a4a9f73b02efdcbd5dde4ba7a/sshd_config
RUN rm /etc/ssh/sshd_config; cp sshd_config /etc/ssh/
ENTRYPOINT ["./entrypoint.sh"]
# further commands

Теперь у вас есть изображение с ssh-сервером внутри, все, что вам нужно сделать, это запустить службу, вы не можете сделать RUN service ssh start, потому что она не будет работать - особенности докера, обратитесь к документации. Вы должны использовать Entrypoint следующим образом:

#!/bin/bash
set -e
sh -c 'service ssh start'
exec "$@"

Поместите его в файл entrypoint.sh рядом с вашим Dockerfile - не забудьте chmod 755 entrypoint.sh это. Здесь нужно упомянуть одну вещь: вы все равно не сможете войти в контейнер по ssh - конфигурация сервера SSH по умолчанию не позволяет войти в корневую учетную запись с использованием пароля. Таким образом, вы либо сами меняете конфиги и предоставляете их образу, либо можете доверять мне и использовать созданный мной файл - проверить его по ссылке из Dockerfile - там нет ничего вредоносного, только изменение с prohibit-password на yes.

К счастью для нас - официальные образы MSSQL начинаются с Ubuntu, поэтому все приведенные выше команды идеально вписываются в среду.

Редактировать

Обязательно спросите, если что-то неясно или я прыгаю слишком быстро.

0 голосов
/ 06 июля 2018

Если ваш контейнер содержит сервер базы данных, обычный способ взаимодействия с ним будет через клиент SQL, который подключается к нему; Google предлагает SQL Server Management Studio и библиотеки коннекторов для популярных языков. Мне непонятно, что бы вы сделали, если бы у вас была оболочка в контейнере, и моя главная рекомендация - сосредоточиться на нормальной работе с сервером.

Контейнеры Docker обычно запускают один процесс, и это обычно основной процесс сервера. В этом случае контейнер запускает только SQL Server. Как показывают некоторые другие ответы, вам нужно значительно перестроить контейнер, чтобы даже иметь возможность запустить демон ssh, после чего вам нужно беспокоиться о множестве других вещей, таких как ключи хоста ssh, учетные записи пользователей и пароли. о котором типичное изображение Docker вообще не задумывается.

Также обратите внимание, что внутренний IP-адрес Docker (который вы получили от ip addr; что может сказать вам docker inspect) по сути бесполезен. Всегда есть лучшие способы доступа к контейнеру (использование межконтейнерного DNS для связи между контейнерами; использование IP-адреса хоста или DNS-имени для доступа к опубликованным портам с того же или другого хоста).

0 голосов
/ 06 июля 2018

Для отправки в контейнер необходимо заполнить следующее

  • Сервер SSH (Openssh) должен быть установлен внутри контейнера, а служба ssh должна быть запущена
  • Порт 22 должен быть опубликован из контейнера (при запуске контейнера). Более подробная информация здесь> Опубликовать порты в Docker
  • docker ps команда должна отображать сопоставленные порты 22 * ​​1011 *

Надеюсь, что приведенная выше информация поможет вам разобраться в ситуации ...

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