[英]How can I connect to Postgres database in the container via port 5432
[英]How to make postgres listen on the container's new exposed port (not 5432)?
我嘗試用 Go 初始化一個數據庫。
我在 postgres:alpine 使用端口 5433,因為 5432 已經被另一個微服務應用占用。
func Init() {
DB, err = gorm.Open(postgres.New(postgres.Config{
DSN: "host=url_db user=gorm password=gorm dbname=gorm port=5433 sslmode=disable TimeZone=Asia/Tokyo",
}), &gorm.Config{})
if err != nil {
panic(err)
}
autoMigration()
}
url_db:
build:
context: ./api/services/url/db
dockerfile: Dockerfile
container_name: "url_db"
environment:
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
POSTGRES_HOST: url_db
ports:
- 5433:5433
可以確認這里只暴露了5432。
我試圖通過像這樣創建一個新的 Dockerfile 來公開 5433。
FROM postgres:alpine
EXPOSE 5433
但是我得到了這個錯誤。
failed to initialize database, got error failed to connect to `host=url_db user=gorm database=gorm`: dial error (dial tcp 172.19.0.3:5433: connect: connection refused)
這個評論:
簡單地公開 docker 圖像上的端口不會做任何事情,除非 postgres 實際上配置為偵聽該端口。 – 超級 5 分鍾前
教我標題(如何在 postgres:alpine 圖像上公開一個新端口(不是 5432)?)不是重點,所以我更新了標題。
如何讓 postgres 監聽容器的新暴露端口(不是 5432)?
您可以擁有多個在內部偵聽同一端口的容器,只要它們映射到主機上的不同端口(如果它們已發布)。 在您的示例中,您可以設置
url_db:
image: postgres:latest
environment:
POSTGRES_USER: gorm
et: cetera
ports:
- 5433:5432
來自 Docker 外部的連接到達重新映射的端口,位於<host ip>:5433
。 Docker 容器之間的連接使用url_db:5432
上的標准服務端口。 這些連接忽略(並且不需要) ports:
.
現代 Docker 中的“暴露”幾乎沒有任何意義; 它作為圖像中的文檔最有價值,顯示服務通常使用的端口。 理論上您可以要求 Compose expose:
額外的端口而不修改圖像,但這樣做沒有實際效果。
您有多種選擇:
選項 1:定義自己的 postgresql.conf
url_db:
build:
context: ./api/services/url/db
dockerfile: Dockerfile
container_name: "url_db"
command: postgres -c "config_file=/etc/postgresql/postgresql.conf"
environment:
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
POSTGRES_HOST: url_db
ports:
- 5433:5433
volumes:
- /path/to/config:/etc/postgresql/postgresql.conf
Postgres 在容器內的/usr/share/postgresql/postgresql.conf.sample
有一個示例配置。
要運行配置:
docker run -i --rm postgres cat /usr/share/postgresql/postgresql.conf.sample > my-postgres.conf
選項 1:覆蓋 RUN 命令
url_db:
build:
context: ./api/services/url/db
dockerfile: Dockerfile
container_name: "url_db"
command: postgres -c port=5433
environment:
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
POSTGRES_HOST: url_db
ports:
- 5433:5433
對於 Docker 假設我們要將端口更改為 5433
另一種方法是在 docker-compose.yml 文件中執行以下操作
postgres:
image: postgres:10.14-alpine
environment:
POSTGRES_DB: iam
ports:
- 5433:5433
volumes:
- ./db:/var/lib/postgresql/data
port
port = 5433 # (change requires restart)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.