在Docker Compose中更改postgres容器服务器端口

Gre*_*dot 23 postgresql docker docker-compose

我正在尝试使用Docker compose在远程服务器上部署第二个数据库容器.这个postgresql服务器在端口5433上运行,而不是第一个postgresql容器使用的5432.

当我设置应用程序时,我收到此错误输出:

web_1  | django.db.utils.OperationalError: could not connect to server: Connection refused
web_1  |    Is the server running on host "db" (172.17.0.2) and accepting
web_1  |    TCP/IP connections on port 5433?
Run Code Online (Sandbox Code Playgroud)

我的docker撰写文件是:

db:
  image: postgres:latest
  environment:
    POSTGRES_PASSWORD: route_admin
    POSTGRES_USER: route_admin
  expose:
    - "5433"
  ports:
    - "5433"
  volumes:
    - ./backups:/home/backups



web:
  build: .
  command:  bash -c "sleep 5 && python -u application/manage.py runserver 0.0.0.0:8081"
  volumes:
    - .:/code
  ports:
    - "81:8081"
  links:
    - db
  environment:
    - PYTHONUNBUFFERED=0
Run Code Online (Sandbox Code Playgroud)

我觉得问题必须是服务器实例上的postgresql.conf文件,将端口设置为5432,导致我的应用程序尝试连接时出错.是否有一种简单的方法可以使用compose文件中的命令更改端口,而不是使用卷来替换文件?

我正在使用官方的postgresql容器来完成这项工作.

use*_*385 74

有些人可能希望实际更改 Postgres 运行的端口,而不是使用 port 指令将暴露的端口重新映射到主机。为此,请使用command: -p 5433

在用于问题的示例中:

db:
  image: postgres:latest
  environment:
    POSTGRES_PASSWORD: route_admin
    POSTGRES_USER: route_admin
  expose:
    - "5433" # Publishes 5433 to other containers but NOT to host machine
  ports:
    - "5433:5433"
  volumes:
    - ./backups:/home/backups
  command: -p 5433
Run Code Online (Sandbox Code Playgroud)

请注意,只有主机会遵守端口指令。其他容器不会。

  • 谢谢 - 这对我们有用!根据[命令行文档](https://www.postgresql.org/docs/13/app-postgres.html),`PGPORT`环境变量也可以工作。 (10认同)
  • @OsamaHafez:只需添加 `CMD ["-p", "5433"]` 。参考文档:https://docs.docker.com/engine/reference/builder/#cmd。以这种方式设置命令依赖于入口点是命令前缀,该前缀需要 -p 开关,就像 Docker Hub 中的“postgres:latest”镜像一样。 (5认同)
  • 我们如何将命令“-p 5433”添加到 Dockerfile,而不是 docker-compose 文件?我一直在寻找这个问题的答案,但我一直迷失方向。 (2认同)

Rob*_*kal 45

我假设postgres正在容器中的端口5432上运行,并且您希望在5433上的主机上公开它.

在ports strophe中使用它:

ports:
    -"5433:5432"
Run Code Online (Sandbox Code Playgroud)

这将在主机上的端口5433上公开服务器.在这种情况下,您可以摆脱现有的暴露.

如果您只想将服务公开给在compose文件中声明的其他服务(而不是localhost),只需使用公开的strophe并将其指向已经在内部公开的端口5432.


tha*_*yne 18

正如前面提到的,这也有效:

environment:
  - PGPORT: 5433
Run Code Online (Sandbox Code Playgroud)