Tenho um contêiner docker executando docker com imagem MySQL. Digamos que ele é chamado sql
.
Este contêiner possui 2 bancos de dados: database1
edatabase2
Criei usuários específicos para cada banco de dados, digamos, user1
acesso total database1
e user2
acesso total adatabase2
Então eu tenho dois outros contêineres docker com imagem PHP. Digamos que um é chamado php1
and php2
.
Todos os 3 contêineres, sql
e php1
estão php2
sendo executados na mesma rede Docker
A questão é que se eu conceder privilégios user1
e user2
disser:
GRANT ALL PRIVILEGES ON `database1`.* TO 'user1'@'php1';
GRANT ALL PRIVILEGES ON `database2`.* TO 'user2'@'php2';
Então, se eu tentar fazer login php1
com:
mysql -p -u user1 -h sql
Ele não pode autenticar porque resolve o nome do host com o IP da rede (por exemplo 172.18.0.3
) em vez de usar o nome do hostphp1
O problema aqui é que li que existe uma configuração no MySQL para my.cnf
isso, não tenho certeza se tem algo a ver com isso chamadoskip-name-resolve
Mas de acordo com este artigo: https://nixcp.com/skip-name-resolve/
Mesmo que isso pudesse resolver o problema, prejudica seriamente o desempenho.
Gostaria de saber se alguém tem alguma solução para esse cenário.
Uma opção poderia ser fixar um IP estático para cada instância do Docker e então, em vez de usar nomes para autenticação, usar o IP diretamente.
Mas estou pensando se há uma solução melhor, além de usar IP estático ou remover a skip-name-resolve
diretiva que estou ignorando completamente.
Depois de bater a cabeça por horas, a solução foi a mais simples que eu poderia pensar
Em vez de usar o nome do host na
GRANT
consulta, simplesmente usei o curinga '%' para direcionar todos os hosts para o mesmo usuário.Eu tive a ideia só de olhar como o arquivo docker composer do WordPress/MySQL foi feito depois de executar e verificar a
User
tabela deles. Eles basicamente fazem isso para resolver o problema. Provavelmente todo mundo faz isso, mas se você planeja configurar tudo sozinho, talvez não perceba isso de início.