【发布时间】:2020-08-25 18:54:07
【问题描述】:
我知道这个网站上有类似的问题,但是这些问题的答案已经过时了。
所以我有一个 django 应用程序,我想使用 postgres 作为底层数据库。
此外,还希望将两个程序分别放在不同的 docker 中。
现在 docker 文档有办法做到这一点,但遗憾的是它似乎已经过时了:link
当我在 docker compose 文件正在运行的 docker build 函数中调用 manage.py migrate 时出现问题。 但我收到主机“db”未知/无效的错误。
撰写摘录:
services:
db:
image: postgres
restart: always
volumes:
- DataBase:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- "5432:5432"
app:
build: FehlzeitErfassungProject
restart: always
volumes:
- Logs:/app/logs
- Backups:/app/Backups
- Media:/app/MEDIA
ports:
- "5432:5432"
depends_on:
- db
应用程序dockerfile:
FROM ubuntu
WORKDIR /app
ADD ./requirements.txt ./
RUN apt-get update && \
apt-get upgrade -y
# getting tzdata to shutup
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Berlin
RUN apt-get -y install tzdata
#installing all needed porgramms
RUN apt-get install -y uwsgi python3 python3-pip
RUN python3 -m pip install pip --upgrade
RUN python3 -m pip install -r requirements.txt
COPY ./ ./
RUN ./manage.py migrate
CMD ["uwsgi", "uwsgu.ini"]
PS:似乎只有在应用程序 docker 已经完成构建时才会启动其他 docker
编辑: 数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': '127.0.0.1',
'PORT': 5432,
}
}
【问题讨论】:
-
我认为自从提出Docker Compose wait for container X before starting Y 或How do you perform Django database migrations when using Docker-Compose? 之类的问题以来,世界的状况并没有真正改变。您根本无法从 Dockerfile 连接到数据库,您需要在容器启动时运行迁移,可能通过入口点脚本。
-
@David 谢谢还没有找到第二个,我目前的工作是你描述的;我启动一个 shell 脚本作为一个入口点,做所有我需要在启动前完成的事情,但我希望它只运行一次,而不是每次重新启动时,因此在构建中运行它会更有效。那么我可以在docker-compose文件中添加命令行中使用的第二个命令,我只需要说docker compose up?
标签: django postgresql docker