为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
哔哔one 2022-09-19 21:26:03
我有两个泊坞窗容器。一个后端,另一个数据库(后缀)。它们都是相互联系的。如何利用 golang 泊客容器中的后端环境 HOST 变量?根据我的理解,这两个容器都有自己的IP地址。我不能在 golang 容器中使用“本地主机”,因为 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:     - dbdb:  image: postgres  restart: always  environment:     POSTGRES_USER: gorm    POSTGRES_PASSWORD: gorm    POSTGRES_DB: gorm  ports:    - 9920:9920我尝试过研究如何访问此变量以及检查Docker教程/文档,但尚未找到解决方案。
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

Docker compose 执行 DNS 解析。您应该能够按名称访问数据库。


删除:


environment: 

  HOST: db

将后滞端口更正为 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")


查看完整回答
反对 回复 2022-09-19
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

Docker 撰写将为您的容器创建一个网络,它们可以在其中相互通信和访问。


您可以通过向服务添加一个名称来对 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:9920


查看完整回答
反对 回复 2022-09-19
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信