Docker Tomcat容器无法访问Postgres容器

我有一个高山docker与postgres,听地址'*'和听5432,我正在部署

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

和我的Tomcat容器与Oracle JRE8,我正在部署我的restWeb服务使用:

 # 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.xx,我检查端口正在收听。

不幸的是我在tomcat上的web服务无法连接到postgres服务

 jdbc:postgresql://192.168.xx: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.xx:5432/dBName 

 jdbc:postgresql://localhost:5432/dBName 

但似乎都没有工作。

在这两种情况下,我都可以看到我的web服务器在tomcatpipe理器中运行,并且能够使用我的dB访问

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

以及pgAdmin。

任何帮助解决这个赞赏。

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

 jdbc:postgresql://postgres:5432/dBName 

非常感谢@larsks指出。

当使用 – 链接时,指向postgres(即您的postgresql容器名称),而不是IP

 jdbc:postgresql://postgres:5432/dBName 

所以为了完整的解决scheme,运行你的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会自动parsing到容器的IP地址链接。

非常感谢@larsks指出。