通过Docker进行Postgresql-Postgres不会自动运行

时间:2018-12-05 09:51:03

标签: postgresql docker docker-compose

主要问题是,即使在vm上也出现错误,我也无法运行postgresql:

root@a2c8a58d4e0e:/# psql -h localhost -U psqluser -W
Password for user psqluser:
psql: 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?
could not connect to server: Cannot assign requested address
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?

为此,我在VM中运行以下命令:

pg_createcluster 9.6 main --start
/etc/init.d/postgresql start

然后它在VM上正常工作。但这是手动的。

我通过正式的docker repo文档配置了所有内容。

这是我的docker compose文件:

version: "3.3"

services:
  postgresql:
    build:
      context: .
      dockerfile: postgresql
    container_name: Postgres
    restart: always
    ports:
    - "5432:5432"
    environment:
      POSTGRES_DB: 'psqldb'
      POSTGRES_USER: 'psqluser'
      POSTGRES_PASSWORD: 'temp123'
    volumes:
    - /home/VOLUMES/DB/Postgresql:/var/lib/postgresql

我确实要从原始存储库继承,因为我想自动运行postgresql服务。否则它将无法运行。

postgresql文件:

FROM postgres:9.6.11
RUN pg_createcluster 9.6 main --start
RUN /etc/init.d/postgresql start

它也不能运行Postgres。仅在VM内部手动操作。

怎么了?

1 个答案:

答案 0 :(得分:1)

在docker compose内,默认情况下端口不在主机上公开。 https://docs.docker.com/compose/compose-file/

ports在docker compose网络中是虚拟的。如果要将它们公开给主机,可以使用expose选项而不是ports

或者,您也可以使用docker-compose run标志运行--service-ports,这将在运行时自动将端口公开给主机。

docker-compose run --service-ports postgresqlsee doc