3 回答

TA貢獻1757條經驗 獲得超7個贊
您的撰寫文件中有錯字。為服務名稱自動配置 DNS 別名,并為您的項目創建默認的 docker 網絡。因此,所需要的只是連接到服務名稱,在您的情況下是“postgre”而不是“postgres”。要解決此問題,請嘗試使用此撰寫文件:
version: '3.6'
services:
? postgres:
? ? image: postgres:11.1-alpine
? ? ports:
? ? ? - '5432:5432'
? ? environment:
? ? ? POSTGRES_USER: 'user'
? ? ? POSTGRES_PASSWORD: 'password'
? ? ? POSTGRESS_DB: 'db_amex01'
? ? volumes:
? ? ? - ./init:/docker-entrypoint-initdb.d/
? todo:
? ? build: ./go_amex/
? ? # ports:
? ? #? ?- "8000:8080"
請注意,您可能會看到的下一個錯誤是連接被拒絕。Compose 將同時啟動兩個容器,您的應用程序可能會在數據庫完成啟動之前運行。要解決這個問題,您需要在應用程序代碼中使用重試循環,重試之間有一個短暫的延遲,以及超時或重試限制。

TA貢獻1802條經驗 獲得超5個贊
您缺少網絡配置。如果你想在容器之間進行通信,這是必需的。
version: '3.6'
services:
postgres: # you were missing the 's'
image: postgres:11.1-alpine
ports:
- '5432:5432'
networks:
- mynet
environment:
POSTGRES_USER: 'user'
POSTGRES_PASSWORD: 'password'
POSTGRESS_DB: 'db_amex01'
volumes:
- ./init:/docker-entrypoint-initdb.d/
todo:
build: ./go_amex/
ports:
- "8000:8000" # I looked at your main.go file, it's port 8000!
networks:
- mynet
networks:
mynet:
driver: bridge
現在您可以通過使用服務名稱作為主機名來查看(通過 dns 解析)容器內的每個服務。
- 3 回答
- 0 關注
- 284 瀏覽
添加回答
舉報