(Probablemente sea una pregunta tonta debido a mi conocimiento limitado con la administración de Docker o mysql, pero como pasé una noche entera con este tema, me atrevo a preguntar).
En una palabra
Quiero ejecutar mysql en un contenedor docker y conectarme a él desde mi host. Hasta ahora, lo mejor que he logrado es:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Más detalles
Estoy usando lo siguiente 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
En el directorio donde está este archivo, puedo construir con éxito la imagen y ejecutarla con:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Cuando adjunto a la imagen, parece funcionar bien:
# 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.
[...]
Sin embargo, no tengo tanto éxito con el anfitrión:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Aún más detalles
- He visto que hay una pregunta que se parece a la mía . Sin embargo, no es lo mismo (y de todos modos no tiene ninguna respuesta)
- He visto que hay imagenes dedicadas a mysql , pero no tuve más éxito con ellas
- Mi
grep -v
puede sentirse raro. Es cierto que puede haber una forma más limpia de hacerlo. Pero cuando adjunto mi imagen, puedo observar que realmente funcionó como se esperaba (es decir, eliminó elbind-address
). Y puedo ver en el contenedor/var/log/mysql/error.log
:
Nombre de host del servidor (dirección de enlace): '0.0.0.0'; puerto: 3306 - '0.0.0.0' se resuelve como '0.0.0.0'; Socket de servidor creado en IP: '0.0.0.0'.