django - Docker:从 Web 容器内部执行 django 迁移到 db 容器
问题描述
姜戈 2.2。
码头工人 19.03.2
我在 gitlab 中运行 CI 管道。该阶段执行几个步骤:
首先我启动数据库容器:
docker run --name db -p 5432:5432 \
-e DJANGO_SETTINGS_MODULE=<myapp>.settings.postgres -d postgres:9.6
请注意,我指定了一个非默认设置文件(其中包含我的数据库凭据)
然后我检查它是否有效:
docker inspect db
真的
现在我用 Django 2.2 构建 Web 容器,并将 postgres 容器的数据库凭据提供给它:
docker build --pull -t test_image . \
--build-arg DB_NAME=<mydbname> \
--build-arg DB_HOST=db \
--build-arg DB_USER=<mydbuser> \
--build-arg DB_PASS=<mydbpassword>
这里有一些澄清: Dockerfile 接受这样的变量:
...
ARG DB_NAME
ARG DB_HOST
ARG DB_PASSWORD
ARG DB_USER
ENV DB_NAME=$DB_NAME
ENV DB_HOST=$DB_HOST
ENV DB_PASS=$DB_PASS
ENV DB_USER=$DB_USER
....
现在docker build
运行 Dockerfile
许多步骤的序列,并在某个时候到达 Django DB 迁移:
RUN python manage.py migrate --settings <myapp>.settings.postgres
这总是会因这个错误而窒息:
django.db.utils.OperationalError:无法连接到服务器:连接被拒绝服务器是否在主机“db”(127.0.0.1)上运行并接受端口 5432 上的 TCP/IP 连接?
我认为这意味着我在 postgres 容器(“db”)启动时给它起的名字并不意味着这个(网络)容器内的任何东西。
我在“迁移”步骤之前检查了 db redentials 变量(只是用 echo 打印)——它们都正常。
我还做了一些实验,将--add-host=db:127.0.0.1
(and --add-host=db:localhost
) 添加到docker run --name db ...
anddocker build ..
命令和--expose=5432
todocker run --name db ...
中,得到了同样的错误。
如何python manage.py migrate
从 Web 容器的构建(Dockerfile)内部针对在此之前已启动的数据库容器中的数据库正确运行“”?
更新 最后我重新设计了系统。迁移是从 .gitlab_ci.yml 执行的,而不是从容器内部执行的。这样,我需要从“docker inspect -f ...”获取 IP 地址
解决方案
你可以尝试创建一个网络
docker network create test_network
并在启动两个容器时传递它
docker run --name db -p 5432:5432 -e DJANGO_SETTINGS_MODULE=<myapp>.settings.postgres -d --network test_network postgres:9.6
或者您可以像这样简单地制作一个 docker-compose.yaml 文件并链接两个容器
version: '3'
services:
db:
image: postgres:9.6
environment:
- POSTGRES_USER:'foo'
- POSTGRES_PASSWORD:'foobar'
- POSTGRES_DB:'foo'
ports:
- "5432:5432"
web:
image: test_image
environment:
DB_NAME: foo
DB_USER: foo
DB_PASS: foobar
ports:
- "8000:8000"
depends_on:
- db
并运行它
docker-compose up -d
推荐阅读
- excel - 如何显示 Excel 桌面应用程序的聊天图标?
- javascript - 用于调整两个 div 大小的垂直拖动条
- asp.net-mvc - VS 2017 不会在适当的视觉设计器中打开 .edmx 文件
- ios - 关于 UIImageView 自定义的建议
- kotlin - RX方式获取本地数据并发送到远程
- python - 如何解决“错误的项目数通过 5,位置暗示 1”
- html - 字体大小随页面焦点或字段焦点而变化
- css - 折叠所有可展开行时,可滚动 PrimeNG 表会破坏正文宽度
- python-3.7 - 如何通过编号向条形图添加标签。(在 python 3.7+ 中使用海龟从列表中制作直方图)
- python - 如何在 python 中使用 Selenium 或请求提取
https://insuretechconnect.com/speakers/
您好,我想从上面的网站中提取演讲者的信息,我