Então, eu tenho um projeto usando Next.js + SQLite + Litestream (backups de banco de dados no Cloudflare R2) + Docker e tentei executar a exclusão do banco de dados na /data
pasta do contêiner ( ./data/
no disco) para ver se o banco de dados se recupera corretamente.
Os dados são recuperados corretamente.
Mas estou curioso para saber quando eu excluo o banco de dados usando rm -rf data/
a linha de comando.
Ele não gera nenhum erro no meu aplicativo e continua funcionando.
Mesmo depois de excluir a data/
pasta, Add One
continue trabalhando. Não sei onde ele é armazenado.Get All
Delete All
data/
Fwiw, eu uso a montagem de ligação de volumes anônimos no Docker Compose.
docker-compose.yml
version: '3.8'
services:
web:
image: easypanel-nextjs:0.0.1
build:
context: .
dockerfile: Dockerfile
container_name: nextjs-sqlite
env_file:
- .env.production
ports:
- 3000:3000
volumes:
- ./data:/data
Agora o que acontece é que os dados só funcionam até eu parar de usar o servidor docker-compose down
e então quando eu reinicio novamente, ele volta ao estado anterior (antes de eu executar rm -rf data
)
Resumidamente,
- Eu faço
docker-compose up
- Adicionar, obter, excluir funcionam bem. Digamos
data = { name: 'abby' }
- Litestream faz backup
data/
a cada inserção ou exclusão. - Eu apago
data/
a pasta. - Ainda consigo acessar meu aplicativo da web com êxito, mesmo que
data/
a pasta que contém o meu*.sqlite
não exista. Deveria travar aqui, mas não trava. - Ainda posso adicionar, obter, excluir. Digamos que sim
data = { name: 'abby', name: 'nia' }
- Agora, quando paro de usar
docker-compose down
e executo novamente usandodocker-compose up
, só consigodata = { name = 'abby' }
.nia
foi excluído porque excluídata/
a pasta antes de adicionar o arquivonia
.
Como isso está acontecendo? Está usando volume anônimo? Não consigo entrar na pasta anônima, não importa o quanto eu tente. Também não sei como fazer o download *.sqlite
dentro de uma pasta anônima se de alguma forma eu acessá-la para poder visualizar seu conteúdo.
Esse comportamento é normal? Eu adoraria resolver isso. Como se o banco de dados não existisse, ele deveria travar.
A reprodução completa pode ser encontrada em https://github.com/deadcoder0904/easypanel-nextjs-sqlite/