(Це, мабуть, німецьке питання через мої обмежені знання з адміністрацією Докера чи 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
:
Ім'я хоста сервера (bind-address): '0.0.0.0'; порт: 3306 - '0.0.0.0' дозволено до '0.0.0.0'; Серверний сокет, створений на IP: '0.0.0.0'.