Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Docker Tomcat容器无法访问Postgres容器_Postgresql_Tomcat_Docker - Fatal编程技术网

Postgresql Docker Tomcat容器无法访问Postgres容器

Postgresql Docker Tomcat容器无法访问Postgres容器,postgresql,tomcat,docker,Postgresql,Tomcat,Docker,我有一个带postgres的alpine docker,其侦听地址为“*”并侦听5432,我正在使用它进行部署 docker run -d --name postgres me/postgres:v1 以及我的带有oracle jre8的tomcat容器,我正在该容器上使用以下工具部署rest web服务: # Set environment ENV CATALINA_HOME /opt/tomcat EXPOSE 8080 # Launch Tomcat on startup C

我有一个带postgres的alpine docker,其侦听地址为“*”并侦听5432,我正在使用它进行部署

docker run -d --name postgres me/postgres:v1
以及我的带有oracle jre8的tomcat容器,我正在该容器上使用以下工具部署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

但两者似乎都不起作用

在这两种情况下,我都可以看到我的web服务器在tomcat manager中运行,并且我可以使用

psql -h localhost -p 5432 -d dBName -U myUser
还有pgAdmin

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

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

jdbc:postgresql://postgres:5432/dBName
jdbc:postgresql://postgres:5432/dBName
非常感谢@larsks指出这一点。

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

jdbc:postgresql://postgres:5432/dBName
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指出这一点。

如果您使用的是
--link
,为什么您的jdbc url有ip地址?只需使用链接的主机名,
postgres
,它将解析为正确的ip地址。不太可能192.168。任何东西都是postgres容器的地址。有趣的是,我不知道。我试过jdbc:postgresql://postgres:5432/dBName 它就像一个符咒。非常感谢larsks。我建议你们中的一位把答案作为答案,这样未来的读者可以立即看到问题已经解决@拉尔克斯