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指出。