Локальный доступ к mysql в docker с удаленного устройства через SSH-туннель

#mysql #docker #docker-compose

#mysql #docker #docker-compose

Вопрос:

Я пытаюсь получить доступ к своей базе данных mysql из workbench через SSH-туннель, mysql находится в контейнере (работает с docker-compose).

Вот моя конфигурация контейнера mysql в docker-compose :

 mysql:

image: mysql:5.7
container_name: mysql
expose:
  - 3306
ports:
  - '3306:3306'
volumes:
  - ./mysql:/var/lib/mysql
environment:
  - "MYSQL_ROOT_PASSWORD=#####"
  - "MYSQL_DATABASE=#####"
  - "MYSQL_USER=#####"
  - "MYSQL_PASSWORD=#####"
restart: always
  

Но я получаю сообщение об ошибке «Не удалось подключиться к MySQL», точно так же, как если бы мои порты не были должным образом перенаправлены с SSH на контейнер MySQL (и поэтому не попали в хорошую дверь).

Пожалуйста, обратите внимание, что я не разрешил удаленный доступ из mysql, так как я хочу, чтобы был возможен только доступ по SSH / localhost.

У вас есть какие-либо идеи? Спасибо

Комментарии:

1. ssh -L Опция должна перенаправляться на опубликованную ports: в контейнере; можете ли вы показать фактические команды, которые вы выполняете, и фактическую ошибку, которую вы получаете?

2. Поскольку я пытаюсь обработать свое соединение через workbench, у меня нет контроля над командой, но если я войду в ssh, попробуйте что-то вроде: mysql -u <mysql_user> -p -h localhost -p 3306 я получаю : ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

3. mysql Клиент неверно localhost истолковывает, что конкретно означает этот файл сокета; вы можете увидеть, имеет ли -h 127.0.0.1 значение (вместо этого используется localhost хорошо известный IPv4-адрес).

4. Вы правы, 127.0.0.1 изменил ответ mysql: Can't connect to MySQL server on '127.0.0.1' (111) . Может быть, проблема с привязкой?

Ответ №1:

Вы уже открываете порт 3306, поэтому вы должны иметь возможность получить к нему доступ из своей системы с помощью приведенной ниже команды —

 mysql -u <mysql_user> -p -h localhost -p 3306
  

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

Комментарии:

1. Что вы подразумеваете под «доступом внутри сеанса docker»? То, что я пытаюсь сделать, это в основном войти на сервер через ssh, затем связаться с localhost, нажав 3306. Но я все равно получаю сообщение об ошибке (см. Мой Комментарий выше)

2. Вы не можете получить удаленный доступ к вашему серверу mysql db, если не разрешите входящий трафик для порта mysql, который равен 3306. Это первое! Во-вторых, если вы используете ssh на своем сервере, а затем пытаетесь подключиться к серверу mysql, который находится в вашем образе docker, возможно, проверьте, запущен ли ваш контейнер docker. Также убедитесь, что вы предоставляете правильные учетные данные. Будет полезно, если вы предоставите вывод «docker ps».

3. Вы попали в ценную вещь: удаленно ли это, если я пытаюсь связаться с контейнером с моего локального хоста? Я не очень хорошо знаком с docker, и даже если я понимаю огромные строки, это все равно неточно. Вот моя строка docker ps : mysql:5.7 "docker-entrypoint.s…" 3306/tcp, 33060/tcp

4. Мне трудно это читать. Пожалуйста, опубликуйте скриншот вашего вывода «docker ps» в вашем вопросе. Мне больше интересно увидеть статус контейнера, указанного в выходных данных.

5. Ах да, извините! Кажется, все в порядке, так как mysql работает нормально, и приложение php (запущенное в другом контейнере) подключается к нему. prnt.sc/uizuiz