使用 Maven 将 Java EE 应用程序部署到 payara41 docker 容器

Deploy Java EE application to payara41 docker container using maven

我正在尝试将一个简单的基于 Maven 的 java Web 应用程序部署到 docker 容器上的 payara 41 应用程序服务器 运行 中。为此,我使用具有以下配置的 Glassfish Maven 插件:

<plugin>
            <groupId>org.glassfish.maven.plugin</groupId>
            <artifactId>maven-glassfish-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>deploy</goal>
                    </goals>
                    <id>deploy</id>
                </execution>
            </executions>
            <configuration>
                <glassfishDirectory>/path/to/local/payara41/glassfish</glassfishDirectory>
                <user>admin</user>
                <adminPassword>MyPassword</adminPassword>
                <debug>true</debug>
                <echo>true</echo>
                <domain>
                    <name>payaradomain</name>
                    <adminPort>4848</adminPort> <!-- mandatory for mvn glassfish:deploy -->
                    <httpPort>8080</httpPort> 
                    <httpsPort>8181</httpsPort>
                    <host>DOCKER_CONTAINER_IP</host>
                    <jvmOptions> 
                        <option>-Djava.security.auth.login.config=${project.build.testOutputDirectory}/login.conf</option> 
                    </jvmOptions> 
                    <properties> 
                        <property> 
                            <name>server.log-service.file</name> 
                            <value>${domain.log.dir}/server.log</value> 
                        </property> 
                    </properties>
                    <resourceDescriptor>${project.build.sourceDirectory}/setup/glassfish-resources.xml</resourceDescriptor> 
                </domain>
                <components>
                    <component>
                        <name>${project.artifactId}</name>
                        <artifact>${project.build.directory}/${project.build.finalName}.war</artifact>
                    </component>
                </components>
            </configuration>
        </plugin>

如您所见,我在域配置中使用主机 属性,因为我正在尝试部署到 docker 容器,这是一个远程域(这可能是错误的,如果是这样你可以纠正我)。

问题是,当我尝试部署应用程序时,我得到以下输出:

Domain payaradomain isn't started. Starting it for you.
Domain payaradomain does not exist. Creating it for you.
[/path/to/local/payara41/glassfish/bin/asadmin, create-domain, --echo=true, --terse=true, --interactive=false, --user, admin, -- passwordfile, /tmp/mgfp5897945230218013760.tmp, --domaindir,  /path/to/local/payara41/glassfish/domains, --profile, developer, -- adminport, 4848, --instanceport, 8080, --domainproperties,  http.ssl.port=8181, payaradomain]
CLI031: Warning: Option "profile" is obsolete and will be ignored.
asadmin --host localhost --port 4848 --user admin --passwordfile   /tmp/mgfp5897945230218013760.tmp --interactive=false --echo=true -- terse=true create-domain --adminport 4848 --profile developer --domaindir   /path/to/local/payara41/glassfish/domains --instanceport 8080 --  savemasterpassword=false --usemasterpassword=false --domainproperties   http.ssl.port=8181 --savelogin=false --nopassword=false --checkports=true   payaradomain
CLI130: Could not create domain, payaradomain
Unable to create domain "payaradomain".
For more detail on what might be causing the problem try running maven   with the --debug option 
or setting the maven-glassfish-plugin "echo" property to "true".

如您所见,maven 正在尝试在本地部署应用程序。我认为 Maven Glassfish 插件的配置有问题。 我正在使用 Netbeans 8.0.2、Apache Maven 3.0.5 和 Java 8

编辑 我 运行 带有 --debug 选项的 maven,但得到了相同的输出。我认为这不是系统权限的问题。有趣的是,我认为 maven 正在尝试执行此命令:

asadmin --host localhost --port 4848 --user admin --passwordfile     /tmp/mgfp2052757567130924436.tmp --interactive=false --echo=true --  terse=true create-domain --adminport 4848 --profile developer --domaindir   /path/to/local/payara41/glassfish/domains --instanceport 8080 --  savemasterpassword=false --usemasterpassword=false --domainproperties   http.ssl.port=8181 --savelogin=false --nopassword=false --checkports=true   payaradomain

其中 localhost 设置为 --host 选项,我认为 maven 尚未从配置中选取此选项。也许我错过了什么。

问题是我的本地 payara 不是 运行,也许这就是它无法创建 payaradomain 的原因。但是在 docker 容器上,即 运行,这个域已经存在

您可能不应该将 docker 容器视为 "remote deploy",而是在主机上发布所有需要的端口(请参阅 运行 命令的 -p 选项),并且只是在本地部署。