Как связать контейнер сервера JBoss с сервером SQL с помощью docker-compose .yml на хосте centos7? - PullRequest
0 голосов
/ 06 марта 2019

мой хост (на самом деле виртуальная машина, но неважно) с Centos 7 Я установил Docker и все связанное с ним программное обеспечение, вытащил и настроил (с сервером jboss) контейнер Centos 7, затем я вытащил и настроилобраз SQL Server 2017 (linux), я прикрепил том, чтобы сделать базы данных постоянными, и, наконец, я настроил Dockerfile для одновременного запуска этих образов и связанного с сетью (название «тестирование»), я поместил приложениедля развертывания на сервере 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-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

1 Ответ

0 голосов
/ 06 марта 2019

Два контейнера не находятся в одной сети Docker. webapp1 находится в локальной сети testing; db1 в сети для каждого стека, созданной Docker Compose.

Я бы полностью удалил все настройки networks: и links: из docker-compose.yml. Docker Compose создаст для вас сеть и подключит все свои контейнеры к этой сети, а имена webapp1 и db1 будут использоваться в качестве имен хостов. После перезапуска стека фиксированный IP-адрес, который вы жестко запрограммировали, будет неправильным. Если вы можете изменить его на ссылку на переменную среды, это лучше, но имя хоста db1 должно работать для доступа к базе данных.

...