Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Docker & SQLite

Boa tarde pessoal,

Estou rodando um projeto .net webapi em um container docker. Os serviços estão subindo como esperado e consigo consumir os endpoints através do swagger.

O problema é que, como a camada de persistência utiliza o SQLite como banco de dados, estou recebendo erro por causa da string de conexão. Não sei exatamente para qual caminho apontar.

Obrigado pela ajuda.

Abraços

3 respostas

Olá, Bruno. Tudo bem?

Isso pode acontecer porque o caminho que você está tentando acessar no container pode não ser o mesmo que você está acostumado a usar no seu ambiente local.

No Docker, o caminho para o banco de dados SQLite deve ser relativo ao local onde o container está sendo executado. Então, se o seu banco de dados SQLite estiver no mesmo diretório do seu projeto, você poderia ter algo assim na sua string de conexão:

"Data Source=./mydatabase.db;"

No exemplo acima, './mydatabase.db' significa que o banco de dados está no mesmo diretório que o executável do projeto.

Se o banco de dados estiver em um subdiretório, você pode apontar para ele da seguinte maneira:

"Data Source=./MySubDirectory/mydatabase.db;"

Lembre-se, o caminho deve ser relativo ao local onde o container está sendo executado, não ao seu sistema de arquivos local.

Espero que isso possa te ajudar a resolver o problema. Lembre-se que a configuração pode variar dependendo do seu setup específico. Qualquer coisa manda aqui de novo. Espero ter ajudado e bons estudos!

Boa tarde Renan, obrigado pela resposta. No meu caso, o docker file compila e executa o projeto. A dll e o banco de dados estão na mesma pasta, fiz o apontamento utilizando "Data Source=./mydatabase.db;". Ao executar a api via swagger recebo a mensagem ""SQLite Error 1: 'no such table: '.""

solução!

Consegui resolver o problema. A questão era que o arquivo .db não estava sendo copiado no momento da compilação do projeto. Incluí um comando de COPY específico para o arquivo .db, não sei se é a maneira correta, mas resolveu a questão.

Obrigado