gpt4 book ai didi

postgresql - 无法从 Golang 容器连接到 Postgres docker 容器

转载 作者:行者123 更新时间:2023-11-29 12:03:14 24 4
gpt4 key购买 nike

我有一个使用 golang 构建的网络服务器。当我在本地测试时,它成功运行。

但是,当我为我的网络服务器构建 docker 镜像时,它无法连接到正在运行的 Postgres 容器。

这是我的docker-compose.yml:

version: '2'
services:
go:
image: golang:1.7
volumes:
- ./:/server/http
ports:
- "80:8080"
links:
- postgres
- mongodb
- redis
environment:
DEBUG: 'true'
PORT: '8080'

postgres:
image: onjin/alpine-postgres:9.5
restart: unless-stopped
ports:
- "5432:5432"
environment:
LC_ALL: C.UTF-8
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
mongodb:
image: mvertes/alpine-mongo:3.2.3
restart: unless-stopped
ports:
- "27017:27017"

redis:
image: sickp/alpine-redis:3.2.2
restart: unless-stopped
ports:
- "6379:6379"

我的Dockerfile:

FROM golang:1.7

RUN mkdir -p /home/app

WORKDIR /home/app

COPY . /home/app

RUN make deps && make

ENTRYPOINT ["./bin/api-test"]

EXPOSE 8080

我正在使用的 Postgres 连接字符串:

postgresql://user:pass@host/mydb?sslmode=disable

对于主机,我尝试了 localhost 并返回了以下错误:

dial tcp [::1]:5432: getsockopt: connection refused

尝试过 postgres 并返回以下内容:

dial tcp 202.71.99.194:5432: getsockopt: connection refused

尝试了我运行此返回 172.19.0.3 命令的 IP 地址:

docker inspect apitest_postgres_1 | grep IPAddress

其中 apitest_postgres_1 是 Postgres 容器名称。它还返回了这个错误:

dial tcp 172.19.0.3:5432: getsockopt: connection timed out

你能告诉我我在这里缺少什么吗?我对 docker 没有经验,这花了很长时间研究解决方案。

编辑:我使用此命令运行我的 golang docker:

docker run --env-file ./example.env --rm -it -p 8080:8080  api-test

example.env 是包含我的环境变量的文件。

编辑 2:我将连接字符串更改为以下内容:

postgresql://user:pass@postgres:5432?sslmode=disable

它返回以下错误:

dial tcp: lookup postgres on 192.168.65.1:53: no such host

我的想法是我的 mac 是这里的问题。我的默认 DNS 是 8.8.8.8,这应该不是问题。

最佳答案

看起来您是在拉取图像而不是构建您自己的图像。

image: golang:1.7 替换为 build: . 以构建和使用您的 Dockerfile

您可能还需要传递 postgres 环境变量 DB_HOSTDB_USERDB_PASS 等。您可以实现,但创建例如 docker.env 文件,然后在你的go app docker-compose.yml 文件下添加env_file:

示例 docker.env :

DB_HOST=postgres
DB_USER=user
DB_PASS=pass
DB_NAME=mydb

更正了 docker-compose.yml :

version: '2'
services:
app:
build: .
volumes:
- ./:/server/http
ports:
- "80:8080"
links:
- postgres
- mongodb
- redis
environment:
DEBUG: 'true'
PORT: '8080'
env_file:
- docker.env

postgres:
image: onjin/alpine-postgres:9.5
restart: unless-stopped
ports:
- "5432:5432"
environment:
LC_ALL: C.UTF-8
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb

mongodb:
image: mvertes/alpine-mongo:3.2.3
restart: unless-stopped
ports:
- "27017:27017"

redis:
image: sickp/alpine-redis:3.2.2
restart: unless-stopped
ports:
- "6379:6379"

关于postgresql - 无法从 Golang 容器连接到 Postgres docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43634861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com