Docker Tomcat容器无法访问Postgres容器

时间:2016-04-18 01:40:00

标签: postgresql tomcat docker

我有一个带有postgres的高山码头,有听音地址' *'并听取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

但似乎都不起作用。

在这两种情况下,我都可以看到我的网络服务器在tomcat管理器中运行,我可以使用

访问我的dB
psql -h localhost -p 5432 -d dBName -U myUser

以及pgAdmin。

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

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

jdbc:postgresql://postgres:5432/dBName

非常感谢@larsks指出它。

1 个答案:

答案 0 :(得分:3)

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

"cmd" : ["ant", "-buildfile", "${project_path}/ant/build/ant_build.xml", "build-and-copy-to-deploy-DEBUG"],
"osx":
{
    "path": "/usr/local/bin"
}

因此,对于完整的解决方案,请运行postgresql和tomcat容器

jdbc:postgresql://postgres:5432/dBName

(注意这里我没有为postgres容器添加端口,因为它已经在内部暴露了5432,除非你想从你的主机外面点击它,你不需要在这里指定一个端口)

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

非常感谢@larsks指出它。