【发布时间】:2017-04-19 17:45:55
【问题描述】:
为了测试,我正在尝试在 docker 容器中设置 Postgres,以便我们的 python 应用可以针对它运行它的测试套件。
这是我的 Dockerfile:
# Set the base image to Ubuntu
FROM ubuntu:16.04
# Update the default application repository sources list
RUN apt-get update && apt-get install -y \
python2.7 \
python-pip \
python-dev \
build-essential \
libpq-dev \
libsasl2-dev \
libffi-dev \
postgresql
USER postgres
RUN /etc/init.d/postgresql start && \
psql -c "CREATE USER circle WITH SUPERUSER PASSWORD 'circle';" && \
createdb -O darwin circle_test
USER root
RUN service postgresql stop && service postgresql start
# Upgrade pip
RUN pip install --upgrade pip
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
# Set the container entrypoint
ENTRYPOINT ["gunicorn", "--config", "/app/config/gunicorn.py", "--access-logfile", "-", "--error-logfile", "-", "app:app"]
当我跑步时:
docker run --entrypoint python darwin:latest -m unittest discover -v -s test
我明白了:
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
我可以让它工作的唯一方法是,如果我 ssh 进入容器,重新启动 postgres 并直接运行测试套件。
这里有什么我遗漏的吗?
【问题讨论】:
-
您的
RUN service postgresql stop && service postgresql start处于 RUN 中,而不是 CMD 或 ENTRYPOINT 中,因此在容器启动时它被“遗忘” -
看看github.com/docker-library/postgres/blob/…的参考PostgreSQL Dockerfile
-
我将
RUN更改为CMD,但仍然出现相同的错误。 -
一个 Dockerfile 中只能有一个 CMD,用的是最新的,看我回答里的链接,还有主管一个
标签: postgresql docker dockerfile