如何在 centos7 主机上使用 docker-compose .yml link JBoss 服务器容器和 SQL 服务器容器?
how to link a JBoss server container with SQL server one using docker-compose .yml on centos7 host?
我的主机(实际上是虚拟机,但没关系)是 Centos 7 我已经安装了 Docker 及其所有相关软件,我已经拉取并配置了(使用 jboss 服务器) Centos 7 容器,然后我拉取并配置了一个 SQL 服务器 2017 映像 (linux),我附加了一个卷以使数据库永久化,最后我配置了一个 Docker 文件来启动这些图像同时与网络链接(名称 "testing"),我已将应用程序部署到 JBoss 服务器上并修改 standalone.xml 以读取数据库 "Simulation_Test" 来自 SQL 服务器,这里是 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-编写 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一个)连接部署的应用时的输出(报错,因为整个输出很长)
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
在 per-stack 网络上 Docker Compose 为您创建。
我将从 docker-compose.yml
中完全删除所有 networks:
和 links:
设置。 Docker Compose 将为您创建一个网络并将其所有容器附加到该网络,名称 webapp1
和 db1
将用作主机名。一旦您重新启动堆栈,您硬编码的固定 IP 地址将是错误的。如果您可以将其更改为更好的环境变量引用,但主机名 db1
应该可以访问数据库。
我的主机(实际上是虚拟机,但没关系)是 Centos 7 我已经安装了 Docker 及其所有相关软件,我已经拉取并配置了(使用 jboss 服务器) Centos 7 容器,然后我拉取并配置了一个 SQL 服务器 2017 映像 (linux),我附加了一个卷以使数据库永久化,最后我配置了一个 Docker 文件来启动这些图像同时与网络链接(名称 "testing"),我已将应用程序部署到 JBoss 服务器上并修改 standalone.xml 以读取数据库 "Simulation_Test" 来自 SQL 服务器,这里是 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-编写 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一个)连接部署的应用时的输出(报错,因为整个输出很长)
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
在 per-stack 网络上 Docker Compose 为您创建。
我将从 docker-compose.yml
中完全删除所有 networks:
和 links:
设置。 Docker Compose 将为您创建一个网络并将其所有容器附加到该网络,名称 webapp1
和 db1
将用作主机名。一旦您重新启动堆栈,您硬编码的固定 IP 地址将是错误的。如果您可以将其更改为更好的环境变量引用,但主机名 db1
应该可以访问数据库。