如何获得主机名从一个容器到另一个使用docker撰写?



我有两个docker容器一个后端,另一个db (postgres)。它们都是有联系的。我如何利用后端环境HOST变量在golang docker容器?

根据我的理解,两个容器都有自己的IP地址。我不能在golang容器中使用'localhost',因为postgres不在本地主机上,而是在一个隔离的容器中。

version: "3.7"
services:
backend:
image: golang:1.16
build: ./
working_dir: /app
volumes:
- ./backend/:/app
environment: 
HOST: db
command: go run main.go
ports:
- 8080:8080
depends_on: 
- db
db:
image: postgres
restart: always
environment: 
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
ports:
- 9920:9920

我试着研究如何访问这个变量以及检查Docker教程/文档,但还没有找到解决方案。

Docker compose做DNS解析。您应该能够通过名称访问您的数据库。

删除:

environment: 
HOST: db

修改postgres端口为5432:

db:
...
ports:
- 5432:5432

你必须能够像这样连接:

db := pg.Connect(&pg.Options{
Addr:     "db:5432",
User:     "gorm",
Database: "gorm",
Password: "gorm",
})
对于环境变量,您可以这样声明和访问它们:
backend:
environment:
POSTGRES_USER: gorm
...
os.Getenv("POSTGRES_USER")

Docker compose将为你的容器创建一个网络,在那里它们可以相互通信和联系。

你可以通过给你的服务添加一个名字来对你的docker组合文件做一个简单的改变,这样就可以确保它们每次都有相同的名字。

version: "3.7"
services:
backend:
image: golang:1.16
build: ./
container_name: backend
working_dir: /app
volumes:
- ./backend/:/app
command: go run main.go
ports:
- "8080:8080"
depends_on: 
- db
db:
image: postgres
restart: always
container_name: db
environment: 
POSTGRES_USER: gorm
POSTGRES_PASSWORD: gorm
POSTGRES_DB: gorm
ports:
- "9920:5432"

Postgres的默认端口是5432,所以我将它映射到您的9920。然后,您可以通过指定:

从后端容器访问db容器。db:9920

相关内容

  • 没有找到相关文章

最新更新