首页 > 解决方案 > 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=5432todocker run --name db ...中,得到了同样的错误。

如何python manage.py migrate从 Web 容器的构建(Dockerfile)内部针对在此之前已启动的数据库容器中的数据库正确运行“”?

更新 最后我重新设计了系统。迁移是从 .gitlab_ci.yml 执行的,而不是从容器内部执行的。这样,我需要从“docker inspect -f ...”获取 IP 地址

标签: djangodockerbuildgitlab-cimigrate

解决方案


你可以尝试创建一个网络

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

推荐阅读