所以我正在通过docker-compose部署django,postgress和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创建的另一个容器运行web python
manage.py migration,将需要手动停止。
我的码头工人组成
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/
您已经注意到了问题。使用时docker-compose run
,将创建一个新容器。
当您运行第一个命令(makemigrations)时,将创建一个新容器,运行makemigrations,并将迁移文件写入到(新)容器的文件系统中。
当您运行第二个命令(迁移)时,将创建另一个新容器。迁移进行了,但是没有任何关系。那是因为迁移文件不可用-它们是用不同于此新文件的容器编写的。
您可以通过两种方法解决此问题。
首先,您可以做已经做的事情,但是要使用docker-compose exec
代替run
。
docker-compose exec web python manage.py makemigrations
docker-compose exec web python manage.py migrate
exec
将使用已经在运行的容器,而不是创建新的容器。
另一种选择是在服务器启动之前,使用入口点脚本并在其中运行迁移。如果您希望事情变得更加自动化,这就是方法。
Dockerfile:
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
entrypoint.sh:
#!/bin/sh
python manage.py makemigrations
python manage.py migrate
exec "$@"
docker-compose.yml(在’web’下):
entrypoint: /entrypoint.sh
在这种情况下,当容器启动时,入口点脚本将运行,处理您的迁移,然后移交给command
(在本例中为Django runserver
)。
如您所见,新容器保持运行状态。这通常是意外的,因为您用应该退出(而不是保持运行)的命令覆盖了该命令。但是,在docker-
compose.yml中,您指定了restart: always
。因此,他们将一遍又一遍地运行迁移命令,并在每次退出时重新启动。
因此,我正在通过docker-comment部署django、post外层空间和nginx容器,我有一个似乎无法解决的问题。 为了解决Django应用程序中的以下错误,我知道我必须运行Django迁移。 在尝试运行迁移时,我尝试了: 返回以下内容: 我只能成功地从Django容器中迁移,例如: 虽然我已经解决了这个问题,但我仍然不明白为什么通过docker-composerun运行迁移实际上并没有
本文向大家介绍通过什么命令查找执行命令?相关面试题,主要包含被问及通过什么命令查找执行命令?时的应答技巧和注意事项,需要的朋友参考一下 答案: which 只能查可执行文件 whereis 只能查二进制文件、说明文档,源文件等
我做错了什么? 作为命令运行docker run-d-name rabbit MQ _ awr-p 5672:5672-p 5673:5673-p 15672:15672 rabbit MQ:3-管理 但http://localhost:15672/没有在浏览器中启动 下面日志
无论何时运行docker构建,我都会得到: “msbuild”不被识别为内部或外部命令,可操作程序或批处理文件。并且“nuget.exe”不被识别为内部或外部命令,可操作程序或批处理文件。 但是,当我从CMD运行msbuild或nuget恢复时,它自己可以正常工作。我已经添加了系统变量/路径的路径
一些注意事项: 1。我最初使用的TestNG jar来自java项目中的maven repo。下面的所有方法都是用maven testNG jar和新的TestNG6.9.12下载进行测试的。 2。我可以从Eclipse中运行这个文件。只有当我尝试从命令行运行时才有问题。 3。最终目标是通过javafx应用程序按钮触发命令行来运行测试。如果提供的解决方案避免在cmd中键入绝对路径,因为应用程序将在
我已经用maven和testNG配置了eclipse,用我的pom配置了PF。xml如下: 我是runnong,在命令提示符下点击这个目录:D:\EclipseWorkspace\iON27Feb2013\iONAutomation\common 我的cmd控制台显示: