gpt4 book ai didi

postgresql - Docker Tomcat 容器无法访问 Postgres 容器

转载 作者:行者123 更新时间:2023-11-29 11:45:02 25 4
gpt4 key购买 nike

我有一个带有 postgres 的 alpine docker,监听地址为“*”并监听 5432,我正在使用它进行部署

docker run -d --name postgres me/postgres:v1

还有我的带有 oracle jre8 的 tomcat 容器,我正在其上部署我的其余 Web 服务:

# Set environment
ENV CATALINA_HOME /opt/tomcat

EXPOSE 8080

# Launch Tomcat on startup
CMD ${CATALINA_HOME}/bin/catalina.sh run
RUN rm -rf ${CATALINA_HOME}/webapps/docs \
${CATALINA_HOME}/webapps/examples \
${CATALINA_HOME}/webapps/ROOT

# Deploying war file
ADD myapp.war ${CATALINA_HOME}/webapps/ROOT.war

# Restarting server after deploying
CMD ${CATALINA_HOME}/bin/catalina.sh run

并用

部署它
docker run -d -p 8080:8080 --name tomcat --link postgres:postgres me/tomcat:v1

两者都在我的笔记本电脑上执行,IP 地址为 192.168.x.x,我检查了端口是否正在监听。

不幸的是,我在 tomcat 上的 web 服务无法使用

连接到 postgres 服务
jdbc:postgresql://192.168.x.x:5432/dBName

替代方案我已经尝试过:我在它自己的端口上启动了 postgres,

docker run -d -p 5432:5432 --name postgres me/postgres:v1
docker run -d -p 8080:8080 --name tomcat me/tomcat:v1

然后用

jdbc:postgresql://192.168.x.x:5432/dBName

jdbc:postgresql://localhost:5432/dBName

但似乎都不起作用。

在这两种情况下,我都可以看到我的 Web 服务器在 tomcat 管理器中运行,并且我可以使用以下命令访问我的 dB

psql -h localhost -p 5432 -d dBName -U myUser

以及 pgAdmin。

感谢任何解决此问题的帮助。

解决方案更新:在使用 --link 时,指向 postgres(即您的 postgresql 容器名称)而不是 IP

jdbc:postgresql://postgres:5432/dBName

非常感谢@larsks 指出这一点。

最佳答案

使用 --link 时,指向 postgres(即你的 postgresql 容器名称)而不是 IP

jdbc:postgresql://postgres:5432/dBName

因此,要获得完整的解决方案,请运行您的 postgresql 和 tomcat 容器

docker run -d --name postgres me/postgresql:v1
docker run -d -p 8080:8080 --name tomcat --link postgres:postgres me/tomcat:v1

(注意这里我没有为 postgres 容器放置端口,因为它已经在内部暴露了 5432,除非你想从你的主机外部访问它,你不需要在这里指定端口)

而你的服务器war文件将是上面的jdbc地址,postgres将在链接时自动解析为容器的IP地址。

非常感谢@larsks 指出这一点。

关于postgresql - Docker Tomcat 容器无法访问 Postgres 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36684210/

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