docker-有问题。我使用Postgres作为数据库编写Django项目,并希望对其进行dockerize。所以问题来了:当我建立和建立容器时,有一个例外:
...
polls | Is the server running on host "postgres" (172.19.0.2) and accepting
polls | TCP/IP connections on port 5432?
但是如果我第二次这样做-一切正常,并且服务器已启动。
Dockerfile:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code/
docker-compose.yml:
version: '3'
services:
postgres:
image: postgres:latest
container_name: polls_db
env_file:
- ./src/main/.env
volumes:
- ./postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
polls:
build: .
container_name: polls
volumes:
- .:/code
env_file:
- ./src/main/.env
ports:
- "8000:8000"
depends_on:
- postgres
command: bash -c "python src/manage.py migrate && python src/manage.py runserver 0.0.0.0:8000"
答案 0 :(得分:1)
就像David Maze在评论中说的那样,听起来您的数据库在启动postgres容器和实际准备建立新连接之间还没有准备好采取行动。您还已经将polls
服务设置为立即开始迁移,这意味着它希望数据库在开始运行的第二秒就可用。
Docker has some suggestions for this。基本上,编写一个包装器脚本以用作您的入口点,例如:
#!/bin/bash
count=1
until [ $count -eq 5 ]
do
sleep 3
python src/manage.py migrate && break
count=$((count + 1))
done
if [ $count -lt 5 ]; then
python src/manage.py runserver 0.0.0.0:8000
fi
某些bash
向导可能会发现此脚本有问题,因为我没有对其进行测试(请随意评论):)想法是,在放弃之前尝试运行迁移几次。您还可以通过psql / curl / wget使用更快的测试,我选择使用manage.py migrate
,因为上述工具通常未安装在普通Docker映像上。