猿问

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

我有两个泊坞窗容器。一个后端,另一个数据库(后缀)。它们都是相互联系的。如何利用 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: 

    - db


db:

  image: postgres

  restart: always

  environment: 

    POSTGRES_USER: gorm

    POSTGRES_PASSWORD: gorm

    POSTGRES_DB: gorm

  ports:

    - 9920:9920

我尝试过研究如何访问此变量以及检查Docker教程/文档,但尚未找到解决方案。


哔哔one
浏览 93回答 2
2回答

慕的地10843

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")

MMMHUHU

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
随时随地看视频慕课网APP

相关分类

Go
我要回答