Eu configurei um aplicativo Docker Django / PostgreSQL seguindo de perto as instruções do Django Quick Start no site Docker .
A primeira vez que executo o manage.py migrate do Django, usando o comando sudo docker-compose run web python manage.py migrate
, ele funciona conforme o esperado. O banco de dados é construído dentro do contêiner Docker PostgreSQL perfeitamente.
As alterações feitas no próprio aplicativo Django são refletidas da mesma forma no contêiner Docker Django, no momento em que eu as salvo. É ótimo!
Mas se eu mudar um modelo no Django e tentar atualizar o banco de dados Postgres para corresponder ao modelo, nenhuma mudança é detectada, então nenhuma migração acontece, não importa quantas vezes eu execute makemigrations
ou migrate
novamente.
Basicamente, toda vez que eu mudo o modelo Django, tenho que deletar os contêineres do Docker (usando sudo docker-compose rm
) e começar do zero com uma nova migração.
Ainda estou tentando entender o Docker e há muita coisa que não entendo sobre como funciona, mas esse está me deixando maluco. Por que a migração não vê minhas alterações? O que estou fazendo de errado?
fonte
You just have to log into your running docker container and run your commands.
mas qual é a razão de ele se comportar dessa forma? @LouisBarranqueiroRespostas:
Você só precisa fazer login no contêiner do docker em execução e executar seus comandos.
docker-compose build -f path/to/docker-compose.yml
docker-compose up -f path/to/docker-compose.yml
docker ps
Agora que você está conectado, vá para a pasta certa:
cd path/to/django_app
E agora, cada vez que você editar seus modelos, execute em seu contêiner:
python manage.py makemigrations
epython manage.py migrate
Também recomendo que você use um docker-entrypoint para que o arquivo django docker contêiner seja executado automaticamente:
Aqui está um exemplo (
docker-entrypoint.sh
):fonte
makemigrations
. na próxima vez que eu lançar minha pilha,migrate
atualizarei o banco de dados com as últimas migrações desfeitas, caso contrário, o aplicativo django não funcionará corretamente ... É apenas um atalho no env dev para ter certeza de que obteve o esquema de banco de dados correto com o aplicativo atualEu uso estes métodos:
Usando a
docker
hierarquia que fizemos, a migração do serviço é executada após a configuração do banco de dados e antes de executar o serviço principal. Agora, quando você executar o serviço,docker
fará migrações antes de executar o servidor; olhe quemigration
servidor é aplicado sobre a mesma imagem que servidor web, isso significa que todas as migrações serão tiradas do seu projeto, evitando problemas.Você evita um ponto de entrada feito ou qualquer outra coisa com este caminho.
fonte
build: .
funciona?image:
Obtenho o erro de que a migração não pode puxar a imagem nomeadabuild:
emmigration
uma vez que será executado antesweb
Coloque sua pilha em execução e dispare um comando docker-compose run de um tiro. Por exemplo
Isso funciona muito bem para o banco de dados SQLite interno (padrão), mas também para um banco de dados dockerizado externo listado como dependência. Aqui está um exemplo de arquivo docker-compose.yaml
https://docs.docker.com/compose/reference/run/
fonte
Você pode usar o
docker exec
comandofonte
docker ps
e então procure a coluna COMMAND para o servidor Django.Se você tem algo assim em seu
docker-compose.yml
Então você pode simplesmente executar ...
fonte
Eu sei que isso é antigo, e talvez esteja faltando alguma coisa aqui (em caso afirmativo, por favor me esclareça!), Mas por que não apenas adicionar os comandos ao seu
start.sh
script, executado pelo Docker para iniciar sua instância? Isso levará apenas alguns segundos extras.NB eu defini o
DJANGO_SETTINGS_MODULE
variável para garantir que o banco de dados correto seja usado, já que uso diferentes bancos de dados para desenvolvimento e produção (embora eu saiba que isso não é 'melhor prática').Isso resolveu para mim:
fonte
Usando o docker exec, estava recebendo o seguinte erro:
Então, usei este comando:
fonte