Docker 与本地主机的连接:5432被拒绝。检查主机名和端口是否正确,邮政局长是否正在接受TCP/IP连接

Docker 与本地主机的连接:5432被拒绝。检查主机名和端口是否正确,邮政局长是否正在接受TCP/IP连接,docker,dockerfile,Docker,Dockerfile,这里是我的DockerFile:- FROM openjdk:10 ENV AQUILA_HOME /data/config #USER root #VOLUME /tmp ADD a2i-web-1.0.0-SNAPSHOT.jar app.jar #RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","app.jar"] 我的jar是需要postgres的spring启动应用程序。 我在本地安装了portgres,它正在本地主机上成

这里是我的DockerFile:-

FROM openjdk:10
ENV AQUILA_HOME /data/config
#USER root
#VOLUME /tmp
ADD a2i-web-1.0.0-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","app.jar"]
我的jar是需要postgres的spring启动应用程序。 我在本地安装了portgres,它正在本地主机上成功运行。 我正在通过命令成功构建DockerFile

sudo docker build -t djtijare/a2i-web:v1 .
但是在通过命令运行它时

sudo docker run -p 8080:8080 -t djtijare/a2i-web:v1
例外情况如下:

Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
我正在包含DockerFile和我的jar的目录中运行这个docker命令
我需要设置任何配置来运行postgres吗?

您无法使用容器中的
localhost
访问主机上的服务,您必须使用主机的ip地址才能访问该服务

这是因为:默认docker将使用桥接器为容器设置内部网络,因此当容器使用localhost时,它不是指主机,而是指容器自身的网络

如果坚持,一个丑陋的解决方案就是使用
--net=host

比如下一步:

sudo docker run --net=host -p 8080:8080 -t djtijare/a2i-web:v1

然后您可以使用
localhost
从容器访问主机的服务。

您的应用程序想要访问postgres吗?它在哪里?我在本地安装了postgres,我正在使用上面的docker命令构建和运行spring boot应用程序。它的可能副本很有帮助,因为它解决了我的问题,但正如你所说,它确实是一个丑陋的解决方案。使用IPAs访问它的其他方式是什么?我说,你需要获得主机的ip,并直接使用主机ip访问postgres。当你不使用容器时,如果postgres不在你应用程序的同一台机器上,你也可以使用这种方法。没有k8s的经验,只知道它不使用docker bridge驱动程序,定制一个可以跨机器的网络