如何在docker centos 6图像上启动postgres 9.6服务

时间:2017-08-01 08:28:56

标签: postgresql docker docker-compose

我对docker-compose很新,我正在尝试使用postgres 9.6在centos 6上构建一个容器并使用docker compose运行它。 然后我希望能够通过一些数据库管理工具连接到数据库。

如果我跑:

docker-compose up
  • 图片构建正确,但我无法连接到数据库。

  • 如果我删除 tty:true stdin_open:true ,图片会构建,但会以退出代码0退出

  • 如果我运行docker-run -it -p 5432:5432 --entypoint / bin / bash [image_name]然后我手动运行命令 service postgresql-9.6 start 一切正常(直到我退出容器)。

有什么建议吗?

这是我的docker-compose文件:

networks{}
version: '2'
services:
    postgres:
        build:
          context: ./src/test/docker/postgres
        ports:
        - "5432:5432"
        stdin_open: true
        tty: true

我的泊坞文件:

FROM centos:6

RUN yum -y install 
https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-
centos96-9.6-3.noarch.rpm

RUN yum -y install postgresql96 postgresql96-server postgresql96-libs 
postgresql96-contrib postgresql96-devel

# Initialize the database (not starting it yet)
RUN service postgresql-9.6 initdb

RUN su postgres

RUN echo "listen_addresses = '*'" >> /var/lib/pgsql/9.6/data/postgresql.conf
RUN echo "PORT = 5432" >> /var/lib/pgsql/9.6/data/postgresql.conf
RUN echo "local   all             all                                     trust" > /var/lib/pgsql/9.6/data/pg_hba.conf
RUN echo "host    all             all             127.0.0.1/32            ident" >> /var/lib/pgsql/9.6/data/pg_hba.conf
RUN echo "host    all             all             ::1/128                 ident" >> /var/lib/pgsql/9.6/data/pg_hba.conf
RUN echo "host    all             all         0.0.0.0/0            md5" >> /var/lib/pgsql/9.6/data/pg_hba.conf

RUN exit

# Expose the PostgreSQL port
EXPOSE 5432

ENTRYPOINT service postgresql-9.6 start

1 个答案:

答案 0 :(得分:1)

docker文件中的ENTRYPOINT允许您将容器配置为可执行文件。这是一种在容器中包含所有依赖项运行所需的内容并运行容器=运行脚本/应用程序等的方法。请参阅文档详细信息here

现在是您的切入点

ENTRYPOINT service postgresql-9.6 start

仅运行服务启动并退出!所以你的容器也会退出。 如果要将其配置为可执行文件,则需要将postgres命令作为ENTRYPOINT命令运行

  ENTRYPOINT ["sudo","-u","postgres","/usr/pgsql-9.6/bin/postgres","-D","‌​/var/lib/pgsql/9.6/d‌​ata","-p","5432"]

每当容器启动时,这将作为ENTRYPOINT命令运行postgres,并且您应该能够连接到它。