无法连接到docker中的postgres服务器
我在sudo docker run -it -p 5432:5432 9c421f1a239c bash
启动了一个postgresql服务器,并通过sudo docker run -it -p 5432:5432 9c421f1a239c bash
公开了5432端口,并在sudo docker run -it -p 5432:5432 9c421f1a239c bash
容器内手动启动postgres服务器,但无法通过命令连接到它: psql -h 172.17.0.63 -U venti
。 172.17.0.63
是一个正确的IP,通风是我的PG用户名。 但是得到错误:
psql: could not connect to server: Connection refused Is the server running on host "172.17.0.63" and accepting TCP/IP connections on port 5432?
我的pg_hba.conf看起来像这样:
local all postgres peer host all all 0.0.0.0/0 trust local all all trust
连接到容器内的pg服务器成功工作。
Dockerfile:
FROM ubuntu:12.04 RUN apt-get update RUN apt-get install -y gcc libc-dev-bin libc6 libc6-dev libssl-dev libkrb5-dev comerr-dev RUN apt-get install -y postgresql-common libpq-dev postgresql-9.1-postgis --fix-missing RUN apt-get install -y postgresql postgresql-client USER postgres ENV PGDATA /etc/postgresql/9.1/main ENV LOGDIR /etc/postgresql/9.1/main/postgresql.log WORKDIR /usr/lib/postgresql/9.1/bin USER root RUN apt-get install -y vim USER postgres RUN sed -e '90d' -i /etc/postgresql/9.1/main/pg_hba.conf RUN sed -e '91d' -i /etc/postgresql/9.1/main/pg_hba.conf RUN echo "host all all 0.0.0.0/0 trust" >> '/etc/postgresql/9.1/main/pg_hba.conf' RUN echo "local all all trust" >> '/etc/postgresql/9.1/main/pg_hba.conf' RUN ./pg_ctl start && sleep 8 && ./createdb pg && ./createdb bloodstone \ && createuser -Upostgres -s venti \ && createdb -Uventi -Oventi venti # ENTRYPOINT ./pg_ctl start && bash -c "while true; do echo "" > /dev/null; sleep 1; done" VOLUME $PGDATA EXPOSE 5432
这几乎是一个错误的configuration,我应该设置pg来监听公共地址或进行端口映射。 我解决了这个问题,编辑pgconfiguration文件与sed:
RUN sed -e "s/[#]\?listen_addresses = .*/listen_addresses = '*'/g" -i '/etc/postgresql/9.1/main/postgresql.conf'
把这个添加到Dockerfile中的适当位置应该是可以的。
一般来说,要解决postgresauthentication问题,请查看postgres日志/ stderr来查看失败的详细原因。 (我看到你的问题解决了,但是如果有人遇到类似的问题)
要查找postgres日志位置:“show log_destination;” 如果你有一个工作的psql(例如在本地的postgres服务器框)
我看到你的设置为“/etc/postgresql/9.1/main/postgresql.log”。 您可以连接到容器,以“docker exec -it container_name bash”查看日志。
或者,如果容器直接运行postgres,“docker attach db_container_name”查看postgres stderr消息。
请注意,默认情况下,用户postgres没有密码,只使用ident auth。
我也面临类似的问题。 尝试运行docker-compose两次。
原因是,在我的docker-compose.yml文件中,数据库服务位于正在尝试连接到尚不存在的数据库的Web服务的下面。
**
version: '2' services: nginx: image: nginx:latest container_name: ng01 ports: - "8000:8000" volumes: - ./src:/src - ./config/nginx:/etc/nginx/conf.d - /static:/static <--- HERE depends_on: - web web: build: . container_name: dg01 command: bash -c "python /src/IMS/manage.py makemigrations && python /src/IMS/manage.py migrate && gunicorn IMS.wsgi -b 0.0.0.0:8000" depends_on: - db volumes: - ./src:/src - /static:/static expose: - "8000" db: image: postgres:latest container_name: ps01**