Eu instalei o mysql8 usando o docker seguindo o guia oficial docker mysql começando
docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=xxx -d mysql:8.0
E notei os seguintes fenômenos:
- Eu não usei o volume
-v
nodocker run
comando, mas depois de parar e iniciar, posso ver que o banco de dados e os dados que adicionei ainda estão lá. (Encontrei em tutoriais que, sem dados de especificação de volume, estariam faltando após a reinicialização do contêiner) - usuário root não tem
'%'
domínio permitido, mas pode de alguma forma fazer login no servidor mysql assim:
docker exec -it mysql8 mysql -uroot -p
o servidor host está de alguma forma no mesmo domínio que o servidor mysql?
- embora eu possa fazer login no mysql no host usando a conta root, e tenho um arquivo some.sql na
pwd
pasta do host, mas não posso executarsource some.sql
no mysql cli. Eu acho que é porque eles não estão no mesmo domínio, e o mysql não vê algum arquivo .sql dentro de seu contêiner.
Por favor, ajude a explicar os 3 itens acima. obrigado.
Os dados sobreviverão às reinicializações do contêiner, mas não à exclusão e recriação. Um volume não seria afetado por isso.
Você está executando esse comando no contêiner, e não no host, portanto, da perspectiva do servidor MySQL, a conexão está vindo do
localhost
. Você poderia usar ummysql
cliente instalado no host ou em outro container para fazer a conexão e isso não funcionaria.Isso é irrelevante.
Isso é pontual. O contêiner é isolado do host. Ele não pode acessar seu sistema de arquivos. Esse é o ponto da conteinerização: você quer que as coisas sejam executadas isoladamente do host e não o afetem.
Você pode compartilhar um arquivo ou diretório usando um volume (
-v /some/dir/on/host:/some/dir/in/container
) ou copiar o arquivo comdocker cp
.