亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓 postgres 監聽容器的新暴露端口(不是 5432)?

如何讓 postgres 監聽容器的新暴露端口(不是 5432)?

Go
斯蒂芬大帝 2022-07-11 17:21:26
我嘗試用 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:alpineEXPOSE 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)這條評論:除非 postgres 實際配置為偵聽該端口,否則僅在 docker 映像上公開端口不會做任何事情。– 超級 5 分鐘前這教我標題(如何在 postgres:alpine 圖像上公開一個新端口(不是 5432)?)不是重點,所以我更新了標題。如何讓 postgres 監聽容器的新暴露端口(不是 5432)?
查看完整描述

3 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

您有多種選擇:


選項 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

/usr/share/postgresql/postgresql.conf.samplePostgres在容器中有一個示例配置。


要運行配置:


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


查看完整回答
反對 回復 2022-07-11
?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

您可以擁有多個在內部偵聽同一端口的容器,只要它們映射到主機上的不同端口(如果它們已發布)。在您的示例中,您可以設置


url_db:

  image: postgres:latest

  environment:

    POSTGRES_USER: gorm

    et: cetera

  ports:

    - 5433:5432

來自 Docker 外部的連接到達重新映射的端口,位于<host ip>:5433. Docker 容器之間的連接使用標準服務端口,在url_db:5432. 這些連接忽略(并且不需要)ports:。


現代 Docker 中的“暴露”幾乎沒有任何意義。它作為圖像中的文檔最有價值,該圖像顯示了服務通常使用的端口。理論上,您可以在expose:不修改映像的情況下向 Compose 請求其他端口,但這樣做并沒有實際效果。


查看完整回答
反對 回復 2022-07-11
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

對于 Docker Compose,假設我們要將端口更改為 5433


這樣做的另一種方法是在 docker-compose.yml 文件中執行以下操作


在這種情況下,您可以將 postgres 數據掛載到目錄中的卷中 ./db

  postgres:

    image: postgres:10.14-alpine

    environment:

      POSTGRES_DB: iam

    ports:

      - 5433:5433

    volumes:

      - ./db:/var/lib/postgresql/data

找到 postgresql.conf 文件,然后搜索port

將端口更改為

port = 5433             # (change requires restart)


查看完整回答
反對 回復 2022-07-11
  • 3 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號