(Вероятно, это глупый вопрос из-за моих ограниченных знаний с администрацией Docker или mysql, но так как я провел целый вечер по этой проблеме, я осмелюсь спросить об этом.)
В двух словах
Я хочу запустить mysql в контейнере докеров и подключиться к нему с моего хоста. Пока что лучшее, что я достигаю, это
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Подробнее
Я использую следующий Dockerfile
FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server
# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
&& mv temp.txt /etc/mysql/my.cnf
# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306
CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log
В каталоге, где есть этот файл, я могу успешно создать изображение и запустить его с помощью
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Когда я прикрепляюсь к изображению, он работает нормально:
# from the host
> docker exec -it <my_image_name> bash
#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[...]
Однако у меня нет такого большого успеха у хоста:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Еще более подробно
- Я видел, что есть вопрос, который выглядит как мой. Однако на самом деле это не так (и у него нет никакого ответа)
- Я видел, что есть изображения посвященные mysql, но у меня не было большего успеха с ними.
- Мой
grep -v
может показаться странным. По общему признанию, может быть более чистый способ сделать это. Но когда я привязан к своему изображению, я могу заметить, что он действительно работал как ожидалось (т.е. Удалилbind-address
). И я вижу в контейнере/var/log/mysql/error.log
Имя хоста сервера (адрес связывания): '0.0.0.0'; порт: 3306 - "0.0.0.0" разрешается до "0.0.0.0"; Сокет сервера, созданный по IP: '0.0.0.0'.