Docker Compose + Postgres:暴露端口

13

我目前正在尝试为我的新Django/Postgres项目使用Docker。我正在使用Mac,通常使用Postico快速连接到我的数据库。

我以前像这样连接:

输入图像描述

我使用官方的Docker文档来设置docker-compose。现在我有一个问题,我无法通过Postico连接到postgres数据库。我觉得问题出现在端口没有被暴露上。

输入图像描述

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
2个回答

11

只需将端口映射到主机,将此添加到Compose文件中的db服务:

只要在Compose文件中的db服务中进行端口映射即可。

ports:
  - "5432:5432"

同时请确保在compose文件中设置postgresql密码变量,如下所示

environment:
  POSTGRES_PASSWORD: example

默认用户是postgres,您可以使用POSTGRES_USER变量进行更改。

您可以在此处阅读有关带有所有选项的映像的用法:https://hub.docker.com/_/postgres/


这个不起作用。我仍然无法通过localhost:5432访问。 - ilyas Jumadurdyew
在较新的compose版本中,你不能将它作为字符串放置。你必须放置- 5432:5432而不是- "5432:5432"。我相信这是一个错误,最终会被修复,但如果你使用字符串,你可以获得一个随机端口。 - undefined

3
默认情况下,Compose为您的应用程序设置单个网络。
每个容器可以通过compose文件中服务的名称进行访问。
在您的情况下,您不必将端口暴露给主机以使Web应用程序可以访问它。您只需在运行在同一Compose上的任何其他服务中使用“db”作为Postgres的主机名(端口为“5432”)即可。
实际上,在Docker Compose文档中提供了一个非常类似的示例:https://docs.docker.com/compose/networking/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接