#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