3 回答
TA贡献1757条经验 获得超7个赞
您的撰写文件中有错字。为服务名称自动配置 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 将同时启动两个容器,您的应用程序可能会在数据库完成启动之前运行。要解决这个问题,您需要在应用程序代码中使用重试循环,重试之间有一个短暂的延迟,以及超时或重试限制。
TA贡献1802条经验 获得超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
现在您可以通过使用服务名称作为主机名来查看(通过 dns 解析)容器内的每个服务。
- 3 回答
- 0 关注
- 209 浏览
添加回答
举报