(É provavelmente uma pergunta idiota devido ao meu conhecimento limitado com a administração do Docker ou do mysql, mas como passei uma noite inteira neste assunto, atrevo-me a perguntar.)
Em poucas palavras
Eu quero executar o mysql em um contêiner docker e me conectar a ele do meu host. Até agora, o melhor que consegui foi:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Mais detalhes
Estou usando o seguinte 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
No diretório onde está este arquivo, posso construir a imagem com sucesso e executá-la com:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
Quando anexo à imagem, parece funcionar muito bem:
# 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.
[...]
No entanto, não tenho muito sucesso do anfitrião:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Ainda mais detalhes
- Eu vi que há uma pergunta que se parece com a minha . No entanto, não é o mesmo (e não tem nenhuma resposta de qualquer maneira)
- Eu vi que existem imagens dedicadas ao mysql , mas não tive mais sucesso com elas
- Minha
grep -v
podem se sentir estranho. É verdade que pode haver uma maneira mais limpa de fazer isso. Mas quando anexo minha imagem, posso observar que ela realmente funcionou conforme o esperado (ou seja: removi obind-address
). E posso ver no contêiner/var/log/mysql/error.log
:
Nome do host do servidor (endereço de ligação): '0.0.0.0'; porta: 3306 - '0.0.0.0' resolve para '0.0.0.0'; Soquete do servidor criado no IP: '0.0.0.0'.