首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker postgres

Docker postgres
EN

Stack Overflow用户
提问于 2018-08-14 02:59:08
回答 1查看 500关注 0票数 1

有一个问题与码头-。我写的Django项目与Postgres作为一个数据库,并想要停靠它。所以问题是:当我构建容器时,有一个例外:

代码语言:javascript
复制
...
polls       |   Is the server running on host "postgres" (172.19.0.2) and accepting
polls       |   TCP/IP connections on port 5432?

但是如果我第二次这样做-一切都是正常的,并且启动了一个服务器。

Dockerfile:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 04:18:16

正如David Maze在评论中所说,在启动postgres容器和实际准备接受新连接之间,您的数据库似乎还没有完全准备好行动。您已经将polls服务设置为立即启动迁移,这意味着它希望db在它开始运行时立即可用。

Docker has some suggestions for this。基本上,编写一个包装器脚本作为您的入口点,类似于:

代码语言:javascript
复制
#!/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镜像上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51828918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档