如何在 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 将为您创建一个网络并将其所有容器附加到该网络,名称 webapp1db1 将用作主机名。一旦您重新启动堆栈,您硬编码的固定 IP 地址将是错误的。如果您可以将其更改为更好的环境变量引用,但主机名 db1 应该可以访问数据库。