Postgresql 无法获取容器之间的连接

Postgresql 无法获取容器之间的连接,postgresql,go,docker-compose,Postgresql,Go,Docker Compose,我已经把代码包括在这里了。。 问题:docker compose文件中的两个容器。一种是标准的Postgress容器。第二个是goLang Scratch容器。当postgres连接失败时,GoLang main.go文件崩溃。您可以在github上看到代码 错误是: 在127.0.0.11:53上拨打tcp:lookup postgres:没有这样的主机 请求: 查看main.go和dockercompose文件,查看此网络的问题。。我错过了什么 梅因,加油 docker-compose.y

我已经把代码包括在这里了。。

问题:docker compose文件中的两个容器。一种是标准的Postgress容器。第二个是goLang Scratch容器。当postgres连接失败时,GoLang main.go文件崩溃。您可以在github上看到代码

错误是: 在127.0.0.11:53上拨打tcp:lookup postgres:没有这样的主机 请求: 查看main.go和dockercompose文件,查看此网络的问题。。我错过了什么

梅因,加油 docker-compose.yml

version: '3.6'
services:
  postgre:
    image: postgres:11.1-alpine
    ports:
      - '5432:5432'
    #network_mode: bridge
    #container_name: postgres
 
    environment:
      POSTGRES_USER: 'user'
      POSTGRES_PASSWORD: 'password'
      POSTGRESS_DB: 'db_amex01'
    volumes:
      - ./init:/docker-entrypoint-initdb.d/

  todo:
    build: ./go_amex/
    # ports:
    #   - "8000:8080"

# sudo docker-compose -f docker-compose.yml up

#  HELP:  how would I add the goLang service from this point?

您缺少网络配置。如果要在容器之间进行通信,则需要执行此操作

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解析)从容器中查看每个服务。

您的撰写文件中有一个输入错误。将自动为服务名称配置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将同时启动两个容器,并且您的应用程序可能会在数据库完成启动之前运行。要解决这个问题,您需要一个重试循环,在重试之间有一个短的延迟,并且在应用程序代码中有一个超时或重试限制。

问题是docker\u compose文件中有一个输入错误。我将postgres容器标记为postgre。这修复了网络查找问题。请告知我是否应该删除此帖子。

可能与compose文件版本2及更新版本的重复,如果您未定义默认网络,则会为项目或堆栈创建默认网络。这里真的需要网络吗?我知道docker compose的第3版中已经添加了一个网络。我在这里谈论这个问题:谢谢。。。这解决了我的问题。。。但是现在我有另一个。。。SSL问题。如果你能看一下,我会很感激的。
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"