主要问题是,即使在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内部手动操作。
怎么了?
答案 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 postgresql
(see doc)