(Вероятно, это глупый вопрос из-за моих ограниченных знаний в области администрирования 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'.