[英]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.