【问题标题】:Dockerfile for Wildfly Java AppWildfly Java 应用程序的 Dockerfile
【发布时间】:2019-01-16 19:39:41
【问题描述】:

我正在尝试为我的 Wildfly Java 应用程序 创建一个 docker 映像。我的应用程序使用 JNDI 创建了一个与 DataSource 的 mysql 连接。我的 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 错了,但是在哪里?

我运行 docker 的文件夹有:

  • restful.war
  • mysql-connector-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"]

这是我用于 java 应用程序的 Pom.xml:

<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>

如何通过mysql数据源连接为wildfly java app创建docker镜像?

【问题讨论】:

  • 您是否尝试过在“添加数据源”之前嵌入主机控制器?我相信在“datasource add”之前添加“embed-host-controller --std-out=echo”可能会解决您的问题(不要忘记用逗号分隔两个命令)。

标签: java mysql hibernate docker wildfly


【解决方案1】:

docker build 是关于基于 Dockerfile 构建容器镜像。此时你的容器没有运行,你的wildfly也没有。你的 jboss-cli.sh 不能工作,因为这是关于与 running wildfly 交互的。

要实现您的目标,您有两个选择

  • ADD 配置了数据源的容器中的配置文件(最有可能是standalone.xml)。每当容器基于您的图像启动时,wildfly 都会读取并连接。

  • ADD自制的entrypoint.sh;一个 bash 脚本,它将启动 wildfly 并运行您需要配置您的 widlfy 的任何内容。

【讨论】:

  • 虽然部分正确,但可以使用带有嵌入式服务器的 jboss-cli 命令离线配置 WildFly。这不需要您启动 WildFly 服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2016-05-19
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 2019-04-09
  • 2018-09-08
相关资源
最近更新 更多