Docker Tomcat容器无法访问Postgres容器

2024-02-12

我有一个带有 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

and

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 指出这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker Tomcat容器无法访问Postgres容器 的相关文章

随机推荐