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

9w11ddsr  于 2023-05-28  发布在  Docker
关注(0)|答案(3)|浏览(285)

我正在尝试使用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?

我的docker compose文件是:

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

我觉得问题一定是服务器示例上的postgresql.conf文件将端口设置为5432,导致我的应用程序尝试连接时出错。有没有一种简单的方法可以使用组合文件中的命令更改端口,而不是使用卷来替换文件?
我正在使用官方的postgresql容器来完成这项工作。

zbdgwd5y

zbdgwd5y1#

有些人可能希望实际更改Postgres运行的端口,而不是使用port指令将暴露的端口重新Map到主机。为此,请使用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

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

vyu0f0g1

vyu0f0g12#

假设postgres在容器中的端口5432上运行,并且您希望将其暴露在5433上的主机上,这将端口strophe:

ports:
    - "5433:5432"

将暴露主机上端口5433上的服务器。在这个场景中,您可以删除现有的expose strophe。
如果您只想将服务公开给compose文件中声明的其他服务(而不是localhost),只需使用expose strophe并将其指向已经内部公开的端口5432。

cpjpxq1n

cpjpxq1n3#

如前所述,这也是可行的:

environment:
  - PGPORT: 5433

相关问题