Docker container bash не может подключиться к локальному серверу MySQL через сокет

Это длинное название, но оно должно быть достаточно ясным.

Если я запустил контейнер докеров с помощью bash и установил mysql через apt-get install mysql-server, выполните следующую команду: mysql -u root -p

Меня встречает громкое:

ОШИБКА 2002 (HY000): не удается подключиться к локальному серверу MySQL через сокет '/var/run/mysqld/mysqld.sock' (2)

То же самое касается практически всего, что установлено и использует сеть.

Означает ли это, что я должен EXPOSE порт 3306? Что, если этот порт используется на хосте (вне контейнера), но все приложения внутри контейнера ожидают вызова этого порта? то есть: когда я запускаю контейнер, открывая 12345:3306, будут ли приложения, использующие интерфейс lo, использовать порт 3306 или 12345?

Я нахожу эту часть довольно запутанной. Спасибо!


person Pomme.Verte    schedule 24.08.2016    source источник
comment
Похоже, это жалоба на сокет Unix, а не на сетевой сокет. (Кстати, обратите внимание, что install не запускает службу.)   -  person Oliver Charlesworth    schedule 24.08.2016
comment
Бинго, похоже, был пб с mysql. Я собираюсь дважды проверить, решает ли он некоторые другие проблемы, которые у меня были.   -  person Pomme.Verte    schedule 25.08.2016
comment
Но просто из любопытства: почему вы устанавливаете mysql во время выполнения, а не во время сборки?   -  person Oleg Sklyar    schedule 25.08.2016
comment
это часть очень длинного и сложного интерактивного сценария установки. Я планирую делать все правильно, но пока я вручную устанавливаю контейнер докеров.   -  person Pomme.Verte    schedule 25.08.2016
comment
@OliverCharlesworth Я отредактировал вопрос, чтобы лучше отразить реальную проблему, с которой я столкнулся. Если вы хотите дать ответ, я его выберу. Вы были правы. По какой-то причине локальные виртуальные машины автоматически запускают службы после их установки, а образ докера - нет.   -  person Pomme.Verte    schedule 25.08.2016


Ответы (1)


Контейнер MySQL Docker не использует блокировку / var / run. Вместо этого попробуйте обратиться к контейнеру напрямую, явно указав его IP-адрес.

Сначала получите IP-адрес контейнера. Что-то вроде этого:

export MYSQL_IP_ADDRESS=$(sudo docker inspect --format="{{ .NetworkSettings.IPAddress }}" mysql_db)

где mysql_db - это имя, которое вы дали своему контейнеру MySQL Docker.

Вы должны иметь возможность «повторить» свой IP-адрес:

corba@bilbovm01:~$ echo $MYSQL_IP_ADDRESS 
172.17.121.2

Затем укажите это имя хоста в командной строке:

mysql -h $MYSQL_IP_ADDRESS -u root -p

Чтобы ответить на ваш другой вопрос о видимости портов, я предполагаю, что вы используете стандартный образ mysql / mysql-server с сайта hub.docker.com. Этот образ автоматически предоставляет 3306, но вы должны запустить его с MYSQL_ROOT_HOST, чтобы вы могли подключиться к нему с IP-адреса вашего хоста. Например, IP-адрес моего хоста - 172.17.121.1. Итак, я бы запустил свой контейнер так:

corba@bilbovm01:~$ sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=blat -e MYSQL_ROOT_HOST=172.17.121.1 mysql/mysql-server:latest 
aa09bc5a30b8f84b68d760d828f8e451238405a177caef4ad802bef44ad43352
corba@bilbovm01:~$ mysql -h $MYSQL_IP_ADDRESS -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
person Corba the Geek    schedule 24.01.2017