Pode parecer uma pergunta fácil, mas não encontrei uma resposta, apesar de procurá-la por um tempo e minhas tentativas não tiveram sucesso.
Estou executando o Sentry via Docker e ele usa o Clickhouse. Posso conectar ao contêiner onde o Clickhouse está localizado via
docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') bash
E lá eu posso conectar clickhouse-client
e executar comandos lá. Para simplificar, vamos supor que o comando que devo executar seja tão simples quanto
SELECT 1 + 2;
Eu testei e ele retornou corretamente 3, como esperado, como a imagem anexa também mostra:
Agora, o que eu gostaria de fazer é executar esse script de fora do contêiner Docker e exibir os resultados no terminal (meu objetivo real é criar um sistema de backup programático para o Sentry, do qual o backup do Clickhouse também faz parte, mas pedir isso seria muito vago e decidi perguntar sobre meu principal obstáculo, ou seja, executar um script de fora do clickhouse-client). É assim que posso me conectar ao Clickhouse de fora do contêiner:
Certamente também posso me conectar ao contêiner Docker clickhouse-client
diretamente, como
docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword>
e então minhas coisas depois. Mas, o que eu gostaria de ter em vez disso é algo como isto (claro, o comando está incorreto):
docker exec -it $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword> -e "SELECT 1 + 2;"
(isso -e
foi inspirado em como o MySQL me permite executar comandos em linha como este)
ou melhor ainda:
cat myinput.sql | docker exec $(docker ps -aqf 'name=sentry-self-hosted_clickhouse_1') clickhouse-client -u <myusername> --password <mypassword> > myoutput.sql
Como posso conseguir isso? (Procurei soluções possíveis, sem muita sorte, ou estou esquecendo de algo óbvio ou isso não está bem documentado)
Para executar uma consulta passada como argumento:
Para executar uma consulta canalizada:
Eles funcionam com minha configuração Docker Compose. Para executá-los com sua configuração Docker simples, o seguinte deve funcionar:
e
(Observe que removi
-t
e mantive apenas-i
, veja aqui .)