使用Tomcat和PostgreSQL在Docker上部署应用程序

我有一个testApp.war,我想通过docker 部署在Tomcat上(docker在10.0.2.157上)。 我的testApp只能用postgres DB和指定的用户testUser和密码testUserPasswd正常工作。 我build立了这样一个结构:

. ├── db │  ├── Dockerfile │  ├── pg_hba.conf │  └── postgresql.conf ├── docker-compose.yml └── web ├── context.xml ├── Dockerfile ├── software │  └── testApp.war └── tomcat-users.xml 

所有这些文件的内容附在下面。 我用命令启动我的容器:

 docker-compose up -d 

但是,当我去webbrowser上的Tomcat( http://10.0.2.157:8282/manager/html ),并尝试启动我的testApp,我得到:

HTTP状态404 – 未find

types状态报告

消息/ testApp /

描述原始服务器没有find目标资源的当前表示,或者不愿意透露目标资源的存在。

Apache Tomcat / 8.5.20

我做错了什么? 你可以帮我吗?


DB / Dockerfile

 FROM postgres:9.5 MAINTAINER riwaniak ENV POSTGRES_USER testUser ENV POSTGRES_PASSWORD testUserPasswd ENV POSTGRES_DB testUser ADD pg_hba.conf /etc/postgresql/9.5/main/ ADD postgresql.conf /etc/postgresql/9.5/main/ 

DB / pg_hba.conf里

 local all all trust host all all 127.0.0.1/32 md5 host all all 0.0.0.0/0 md5 host all 

DB / postgresql.conf中

 listen_addresses='*' 

networking/ context.xml的

 <?xml version="1.0" encoding="UTF-8"?> <Context antiResourceLocking="false" privileged="true" > <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> </Context> 

networking/ Dockerfile

 FROM tomcat:8.5.20-jre8 MAINTAINER riwaniak COPY ./software /usr/local/tomcat/webapps/ CMD ["catalina.sh", "run"] 

networking/ Tomcat的users.xml中

 <?xml version="1.0" encoding="UTF-8"?> <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"> <role rolename="tomcat"/> <role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="tomcat,admin-gui,manager-gui"/> </tomcat-users> 

最后是docker-compose.yml

 version: '2' services: testApp: build: ./web volumes: - /path/to/tomcat/folder/web/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml - /path/to/tomcat/folder/web/context.xml:/usr/local/tomcat/webapps/HelpdeskApp/META-INF/context.xml - /path/to/tomcat/folder/web/context.xml:/usr/local/tomcat/webapps/host-manager/META-INF/context.xml - /path/to/tomcat/folder/web/context.xml:/usr/local/tomcat/webapps/manager/META-INF/context.xml ports: - "8282:8080" links: - testAppdb networks: - testAppnet testAppdb: build: ./db ports: - "5555:5432" volumes: - /srv/docker/postgresql:/var/lib/postgresql - /path/to/tomcat/folder/db/postgresql.conf:/etc/postgresql/9.5/main/postgresql.conf - /path/to/tomcat/folder/db/pg_hba.conf:/etc/postgresql/9.5/main/pg_hba.conf command: postgres -c config_file=/etc/postgresql/9.5/main/postgresql.conf networks: - testAppnet networks: testAppnet: driver: bridge ipam: driver: default config: - subnet: 172.28.0.0/16 

好的,我得到了解决scheme!

谢谢@Tarun Lalwani的支持和build议。

我在Tomcat容器中错误的application.ymlconfiguration。 docker映射我的容器的IP地址,但我不应该只写“10.0.2.157”,但容器的名称 。 所以在我的例子中,我有如下的smth:

 (...) environments: development: dataSource: dbCreate: update url: jdbc:postgresql://10.0.2.157:5432/helpdesk_dev (...) 

然而, 正确的解决scheme是映射postgres容器的名称 (testAppdb),所以正确的configuration是:

 (...) environments: development: dataSource: dbCreate: update url: jdbc:postgresql://testAppdb:5432/test_dev (...)