我对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
答案 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/data","-p","5432"]
每当容器启动时,这将作为ENTRYPOINT
命令运行postgres,并且您应该能够连接到它。