Dockerfile для Java-приложения Wildfly

Я пытаюсь создать образ докера для своего Приложение Wildfly Java. Мое приложение создает соединение mysql с источником данных с JNDI. Мой ORM - Спящий режим. Когда я бегу

docker build -t mytag-app .

он возвращает ошибку:

The command is not available in the current context (e.g. required subsystems or connection to the controller might be unavailable).
The command '/bin/sh -c /opt/jboss/wildfly/bin/jboss-cli.sh --user=admin --password=admin --commands = "data-source add --name=source1 --jndi-name=java:jboss/datasources/MySqlDS --driver-name=mysql-connector-java-8.0.11.jar  --connection-url=jdbc:mysql://sihors.com:3306/nynnphsj_wifigate2?serverTimezone=UTC --user-name=nynnphsj_loretto25 --password=dsotmpinkflo --enable=true"' returned a non-zero code: 1

Я уверен, что мой Dockerfileнеправильно, а где?

В моей папке для запуска докера есть:

  • restful.war
  • mysql-коннектор-java-8.0.12.jar
  • Dockerfile

Это мой Dockerfile:

FROM jboss/wildfly

RUN /opt/jboss/wildfly/bin/add-user.sh admin admin --silent

ADD restful.war /opt/jboss/wildfly/standalone/deployments/
ADD mysql-connector-java-8.0.12.jar /opt/jboss/wildfly/standalone/deployments/

RUN /opt/jboss/wildfly/bin/jboss-cli.sh --user=admin --password=admin --commands = "data-source add --name=source1 --jndi-name=java:jboss/datasources/MySqlDS --driver-name=mysql-connector-java-8.0.11.jar  --connection-url=jdbc:mysql://mydomain.com:3306/mydb2?serverTimezone=UTC --user-name=root --password=root --enable=true"

EXPOSE 8080 9990

CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

А это мой Pom.xml для java-приложения:

<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cosmink</groupId>
<artifactId>restful</artifactId>
<version>1.0</version>
<packaging>war</packaging>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.wildfly.bom</groupId>
            <artifactId>wildfly-javaee7-with-tools</artifactId>
            <version>${version.jboss.bom}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <!-- JAVA EE API -->

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- MySQL DRIVER -->

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>

    <!-- Hibernate -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.1.Final</version>
        <scope>provided</scope>
    </dependency>

    <!-- JJWT -->

    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>${jjwt.version}</version>
    </dependency>

    <!-- jBCrypt -->

    <dependency>
        <groupId>de.svenkubiak</groupId>
        <artifactId>jBCrypt</artifactId>
        <version>${jbcrypt.version}</version>
    </dependency>

    <!-- HttpClient Library -->

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.4</version>
    </dependency>

    <!-- Nats Library Client-->

    <dependency>
        <groupId>io.nats</groupId>
        <artifactId>jnats</artifactId>
        <version>2.0.0</version>
    </dependency>


</dependencies>

<build>
    <finalName>restful</finalName>
    <plugins>
        <plugin>
            <groupId>org.wildfly.plugins</groupId>
            <artifactId>wildfly-maven-plugin</artifactId>
            <version>${version.wildfly.maven.plugin}</version>
            <executions>
                <execution>
                    <id>deploy-driver</id>
                    <phase>package</phase>
                    <configuration>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <name>mysql-connector-java-8.0.11.jar</name>
                    </configuration>
                    <goals>
                        <goal>deploy-artifact</goal>
                    </goals>
                </execution>
                <execution>
                    <id>add-datasource</id>
                    <phase>install</phase>
                    <configuration>
                        <force>true</force>
                        <address>subsystem=datasources,data-source=java:jboss/datasources/MySqlDS</address>
                        <resources>
                            <resource>
                                <properties>
                                    <jndi-name>java:jboss/datasources/MySqlDS</jndi-name>
                                    <enable>true</enable>
                                    <connection-url>jdbc:mysql://mydomain.com:3306/db?serverTimezone=UTC</connection-url>
                                    <driver-name>mysql-connector-java-8.0.11.jar</driver-name>
                                    <user-name>root</user-name>
                                    <password>root</password>
                                    <pool-name>people-web</pool-name>
                                    <use-java-context>true</use-java-context>
                                </properties>
                            </resource>
                        </resources>
                    </configuration>
                    <goals>
                        <goal>add-resource</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <add-user>
                    <users>
                        <user>
                            <username>admin</username>
                            <password>admin</password>
                        </user>
                    </users>
                </add-user>
            </configuration>
        </plugin>
    </plugins>
</build>

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <jjwt.version>0.7.0</jjwt.version>
    <jbcrypt.version>0.4.1</jbcrypt.version>
    <version.jboss.bom>13.0.0.Final</version.jboss.bom>
    <version.wildfly.maven.plugin>1.2.1.Final</version.wildfly.maven.plugin>
</properties>

Как создать образ докера для Java-приложения wildfly с подключением к источнику данных mysql?

Вы пробовали встраивать хост-контроллер перед «добавлением источника данных»? Я считаю, что добавление «embed-host-controller --std-out = echo» перед «добавлением источника данных» может решить вашу проблему (не забудьте разделить обе команды запятой).

Dominique Toupin 09.08.2018 15:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 774
1

Ответы 1

docker build - это создание образа контейнера на основе Dockerfile. На данный момент ваш контейнер не запущен, как и ваша дикая муха. Ваш jboss-cli.sh не может работать, поскольку речь идет о взаимодействии с дикой мухой Бег.

Для достижения своей цели у вас есть два варианта

  • ADD - файл конфигурации (скорее всего, standalone.xml) в контейнере с настроенным источником данных. Каждый раз, когда контейнер запускается на основе вашего изображения, wildfly прочитает его и подключится.

  • ADD самодельный entrypoint.sh; сценарий bash, который запустит wildfly и выполнит все, что вам нужно для настройки вашего widlfy.

Хотя отчасти это правда, можно настроить WildFly в автономном режиме с помощью команд jboss-cli со встроенным сервером. Для этого не требуется запускать сервер WildFly.

Caleb Adams 07.05.2020 05:41

Другие вопросы по теме