postgres 在 docker 容器内不工作

postgres doesn't work inside docker container

我一直在使用 Postgres 使用 golang 开发网页。我可以 运行 没有 docker 容器的应用程序,我可以连接到数据库,没有出现任何问题。然而,当我 docker 化我的应用程序并 运行 它时,Postgres 显示错误:dial tcp 127.0.0.1:5432: connect: connection refused.

正在连接到 postgres:

db, err := sql.Open("postgres", "host=localhost port=5432 user=postgres password=postgres dbname=postgres sslmode=disable")

我在网上搜索了一下,发现容器里面localhost会指向容器。我尝试连接指定我的服务器的 IP:

db, err := sql.Open("postgres", "host=XXX.XXX.XX.XXX port=5432 user=postgres password=postgres dbname=postgres sslmode=disable")

它也显示了同样的错误:dial tcp XXX.XXX.XX.XXX:5432: connect: connection refused

当我 运行 它没有 docker 时它工作正常。 怎么办?

这是我的 docker 文件。我只是想将最简单的应用程序上传到专用服务器。我使用 ssh root@IP 登录并安装了 go 和 postgres。我将我的应用程序拉到服务器,然后使用 go build 和 ./app 启动它。一切正常。现在我想 运行 使用下面的 docker 文件。

FROM golang:alpine RUN mkdir /app ADD . /app WORKDIR /app COPY go.mod . RUN go mod download COPY . . RUN go build -o main . CMD ["/app/main"]

仔细查看@colm.anseo的评论后,我想出了如何访问docker容器中的宿主机。我用了国旗 --network="host" 到 运行 我的 docker 容器。所以我用了: docker run -it --network="host" myapp 到 运行 容器。据我了解,这将 绑定docker容器和主机

的IP

您可以在以下位置阅读更多相关信息:From inside of a Docker container, how do I connect to the localhost of the machine?