Iri*_*ngo 7 postgresql go docker-compose
我已在此处包含代码.. https://github.com/vinceyoumans/achal
问题: docker compose 文件中有两个容器。一种是标准的 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)
}
Run Code Online (Sandbox Code Playgroud)
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?
Run Code Online (Sandbox Code Playgroud)
BMi*_*tch 10
您的撰写文件中有一个拼写错误。系统会自动为服务名称配置 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"
Run Code Online (Sandbox Code Playgroud)
有关撰写文件网络的更多详细信息,请参阅:https ://docs.docker.com/compose/networking/
请注意,您可能会看到的下一个错误是连接被拒绝。Compose 将同时启动两个容器,并且您的应用程序可能会在数据库完成启动之前运行。为了解决这个问题,您需要在应用程序代码中使用重试循环,重试之间有较短的延迟,并设置超时或重试限制。
小智 5
您缺少网络配置。如果您想在容器之间进行通信,这是必需的。
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
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用服务名称作为主机名来查看(通过 dns 解析)容器内的每个服务。
| 归档时间: |
|
| 查看次数: |
33993 次 |
| 最近记录: |