我已经把密码写在这里了。https://github.com/vinceyoumans/achal
问题:在一个码头组合文件中的两个容器。一个是标准的邮政集装箱。第二个是goLang划痕容器。当postgres连接失败时,GoLang main.go文件将陷入恐慌。你可以在github上看到代码。
错误是:
拨号tcp:在127.0.0.11:53上查找postgres :没有这样的主机
请求:查看main.go和dockercompose文件,看看这个网络有什么问题。我错过了什么。
main.go
db, err := gorm.Open("postgres", "host='postgres' port=5432 user=docker dbname='docker' password='password'")
if err != nil {
fmt.Println("============ exiting ==========")
fmt.Println(err)
panic("failed to connect database e")
// the error i get... dial tcp: lookup postgres on 127.0.0.11:53: no such host
// panic("failed to connect database: " + err)
}船坞-复合船坞
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?发布于 2018-12-12 10:19:37
您的撰写文件中有一个错误。将自动为服务名称配置DNS别名,并为您的项目创建默认的停靠网络。因此,所需要的就是连接到服务名称,在您的示例中,该名称是"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"有关撰写文件网络的详细信息,请参阅:https://docs.docker.com/compose/networking/
请注意,您可能会看到的下一个错误是拒绝连接。Compose将同时启动两个容器,您的应用程序很可能在数据库启动之前运行。要解决这个问题,您需要在应用程序代码中有一个重试循环,在重试之间有一个较短的延迟,以及一个超时或重试限制。
发布于 2018-12-12 04:41:25
你错过了网络配置。如果要在容器之间进行通信,这是必需的。
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解析)从容器中看到每个服务。
发布于 2018-12-13 13:34:46
这个问题是docker_compose文件中的一个错误。我把postgres容器标记为postgre。解决了网络查找问题。如果我要删除这篇文章,请提出建议。
https://stackoverflow.com/questions/53735948
复制相似问题