有一个问题与码头-。我写的Django项目与Postgres作为一个数据库,并想要停靠它。所以问题是:当我构建容器时,有一个例外:
...
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"发布于 2018-08-14 04:18:16
正如David Maze在评论中所说,在启动postgres容器和实际准备接受新连接之间,您的数据库似乎还没有完全准备好行动。您已经将polls服务设置为立即启动迁移,这意味着它希望db在它开始运行时立即可用。
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镜像上。
https://stackoverflow.com/questions/51828918
复制相似问题