簡體   English   中英

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

[英]Changing a postgres containers server port in 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?

我的 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 容器來完成這項工作。

我假設 postgres 正在容器中的端口 5432 上運行,並且您想在 5433 上的主機上公開它。

這個端口strophe:

ports:
    - "5433:5432"

將在主機上的端口 5433 上公開服務器。 在這種情況下,您可以擺脫現有的公開 strophe。

如果您只想將服務公開給撰寫文件(而不是本地主機)中聲明的其他服務,只需使用公開 strophe 並將其指向已經在內部公開的端口 5432。

請記住, EXPOSE 指令實際上並沒有做任何事情(它更像是對您的提示)。 端口 5432 將向組合文件中聲明的其他服務公開,無論是否使用該指令。

有些人可能希望實際更改 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

請注意,只有主機會遵守端口指令。 其他容器不會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM