我正在使用docker-compose部署Django、PostgreSQL和Nginx容器,但遇到了一个问题无法解决。
为了解决Django应用程序中的以下错误,我知道只需运行Django迁移即可。
docker@postgres ERROR: relation "accounts_myprofile" does not exist
为了运行迁移,我尝试了以下操作:
docker-compose run web python manage.py makemigrations
docker-compose run web python manage.py migrate
返回了以下内容:
Migrations for 'accounts':
accounts/migrations/0001_initial.py:
- Create model Entry
- Create model MyProfile
Running migrations:
No migrations to apply.
我只能在Django容器内成功迁移数据,举个例子:
docker exec -i -t 6dc97c6a305c /bin/bash
python manage.py makemigrations
python manage.py migrate
虽然我已经解决了问题,但我仍然不明白为什么通过docker-compose run运行迁移实际上没有迁移任何内容。我希望有人可以指点一下我。
此外,我不知道这是否是相关的问题,但当我运行那些docker-compose run web命令时,它们似乎会创建新的容器,除非我手动停止它们,否则它们不会关闭,docker-compose stop无法删除它们。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7bb3c7106d1 accounts_web "python manage.py che" 4 hours ago Restarting (0) 41 minutes ago 8000/tcp accounts_web_run_62
ee19ca6cdf49 accounts_web "python manage.py mig" 4 hours ago Restarting (0) 43 minutes ago 8000/tcp accounts_web_run_60
2d87ee35de3a accounts_web "python manage.py mak" 4 hours ago Restarting (0) 43 minutes ago 8000/tcp accounts_web_run_59
1c6143c13097 accounts_web "python manage.py mig" 4 hours ago Restarting (1) 44 minutes ago 8000/tcp accounts_web_run_58
6dc97c6a305c b1cb7debb103 "python manage.py run" 3 days ago Up 4 hours 8000/tcp accounts_web_1
注意:Docker-compose stop 命令将会妥善地停止底部的容器(按照应有的方式),但是由docker-compose run web python manage.py migrate 创建的其他容器需要手动停止。
我的docker-compose文件:
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app
- /usr/src/app/static
env_file: .env
environment:
DEBUG: 'true'
command: python manage.py runserver 0.0.0.0:8000
postgres:
restart: always
image: kartoza/postgis:9.4-2.1
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/