我的主机(在现实的虚拟机中井井有条,但没关系),我已经安装了Docker及其所有相关软件,我已经拉出和配置了(使用JBOSS服务器)A centos 7容器,然后我拔出并配置了一个SQL Server 2017 Image(Linux),我附上了一个卷以使数据库永久性,最后我配置了一个Dockerfile,以同时启动这些图像,并与网络链接(名称" Testing)"),我已经放置了一个应用程序来部署在JBOSS服务器上,并修改了standalone.xml以读取来自SQL Server的数据库" simulation_test",以下是Standlone.xml(数据源部分)
<datasources>
<datasource jta="true" jndi-name="java:/jboss/datasources/simulation_star1" pool-name="simulation_star1" enabled="true" use-ccm="false">
<connection-url>jdbc:sqlserver://172.22.0.2:1433;databaseName=Simulation_Test</connection-url>
<driver>sqlserver</driver>
<security>
<user-name>SA</user-name>
<password>catycaty07X</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
docker-compose yml
version: "3.0"
services:
webapp1:
ports:
- '8080:8080'
- '9990:9990'
networks:
- 'testing'
links:
- db1
image: centoswithjbossconfigured2
db1:
environment:
- 'ACCEPT_EULA: Y'
- 'MSSQL_SA_PASSWORD: catycaty07X'
- 'MSSQL_PID: Developer'
ports:
- '1433:1433'
volumes:
- 'my_volume3:/var/opt/mssql/data'
image: mcr.microsoft.com/mssql/server:2017-latest
volumes:
my_volume3:
networks:
testing:
和最终与已部署的应用程序连接时服务器的输出(JBOSS ONE)(错误,因为整个输出非常长)
webapp1_1 | 09:46:23,353 ERROR [org.jboss.as.ejb3.invocation] (http-/0.0.0.0:8080-6) JBAS014134: EJB Invocation failed on component ConnexionService for method public abstract com.star.simulation.dto.AgenceDTO com.star.simulation.service.IConnexionService.connexion(java.lang.String,java.lang.String): javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.GenericJDBCException: Could not open connection
两个容器不在同一docker网络上。webapp1
在本地创建的testing
网络上;db1
在每个堆栈网络码头上为您创建。
我将完全从docker-compose.yml
中删除所有networks:
和links:
设置。Docker Compose将为您创建一个网络,并将其所有容器附加到该网络,并且名称webapp1
和db1
将可用作主机名。重新启动堆栈后,硬编码的固定IP地址将是错误的。如果您可以将其更改为更好的环境变量参考,但是主机名db1
应该可以使用数据库。