问题是docker_compose文件中的错字。我将postgres容器标记为postgre。这解决了网络查找问题。请咨询我是否应该删除此帖子。
我在这里包括了代码。 https://github.com/vinceyoumans/achal
问题:泊坞窗中的两个容器组成文件。一种是标准的Postgress容器。第二个是goLang Scratch容器。当postgres连接失败时,GoLang main.go文件会出现混乱。您可以在github上查看代码。
请求: 查看main.go和dockercompose文件,看看此网络出了什么问题..我缺少了什么。
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)
}
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?
答案 0 :(得分:2)
您缺少网络配置。如果要在容器之间进行通信,这是必需的。
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解析从容器中查看每个服务。
答案 1 :(得分:1)
撰写文件中有错字。将自动为服务名称配置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"
有关撰写文件网络的更多详细信息,请参见:https://docs.docker.com/compose/networking/
请注意,您可能会看到的下一个错误是连接被拒绝。 Compose将同时启动两个容器,并且数据库启动完成之前,您的应用程序可能正在运行。为了解决这个问题,您将需要一个重试循环,在您的应用程序代码中重试之间的延迟很短,并且有超时或重试限制。
答案 2 :(得分:0)
问题是docker_compose文件中的错字。我将postgres容器标记为postgre。这解决了网络查找问题。请咨询我是否应该删除此帖子。