Docker Tomcat容器无法访问Postgres容器



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

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

以及我的tomcat容器和oraclejre8,我正在上面部署我的rest 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的指出。

使用--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的指出。

最新更新