Grails 3.1.4和Docker - grails命令返回"找不到名称web的配置文件"

Ed *_*d J 9 grails gradle docker grails-3.1

我有一个简单的grails应用程序,它本身运行良好.使用grails web配置文件时没有问题grails run-app

但是,当我从应用程序中构建docker镜像时,grails命令(例如grails run-app --stacktracegrails dependency-report --stacktrace发送到docker)会失败并显示堆栈跟踪:

| Error Error occurred running Grails CLI: No profile found for name [web]. (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.IllegalStateException: No profile found for name [web].
    at org.grails.cli.GrailsCli.initializeProfile(GrailsCli.groovy:507)
    at org.grails.cli.GrailsCli.initializeApplication(GrailsCli.groovy:308)
    at org.grails.cli.GrailsCli.execute(GrailsCli.groovy:271)
    at org.grails.cli.GrailsCli.main(GrailsCli.groovy:162)
| Error Error occurred running Grails CLI: No profile found for name [web].
Run Code Online (Sandbox Code Playgroud)

Docker Build命令:从grails应用程序的根目录运行.用户位于docker组中.

docker build -t mygrailsapp .
Run Code Online (Sandbox Code Playgroud)

DockerFile:(.上构建Grails的运行依赖报告--stacktrace会失败.如果我删除命令,构建完成.然而,在第一时间应用程序与它失败同样的错误默认命令运行.)

#
# My Dockerfile
#
# https://github.com/dockerfile/java
# https://github.com/dockerfile/java/tree/master/oracle-java8
# https://hub.docker.com/r/mozart/grails/

# Pull base image. 
FROM ubuntu

RUN apt-get update

# install apt-get-repository
RUN \
    apt-get install -y software-properties-common wget unzip git

# Install Java.
RUN \
  echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
  add-apt-repository -y ppa:webupd8team/java && \
  apt-get update && \
  apt-get install -y oracle-java8-installer
  rm -rf /var/lib/apt/lists/* && \
  rm -rf /var/cache/oracle-jdk8-installer

# Define working directory.
WORKDIR /data

# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle


# Set customizable env vars defaults.
# Set Grails version (default: 3.1.4; min: 3.0.0; max: 3.1.4).
ENV GRAILS_VERSION 3.1.4

# Install Grails
WORKDIR /usr/lib/jvm

# TODO put grails zips on your own server with decent bandwidth
RUN wget https://github.com/grails/grails-core/releases/download/v$GRAILS_VERSION/grails-$GRAILS_VERSION.zip && \
    unzip grails-$GRAILS_VERSION.zip && \
    rm -rf grails-$GRAILS_VERSION.zip && \
    ln -s grails-$GRAILS_VERSION grails

# Setup Grails path.
ENV GRAILS_HOME /usr/lib/jvm/grails
ENV PATH $GRAILS_HOME/bin:$PATH

# Create App Directory
RUN mkdir /app

# Set Workdir
WORKDIR /app

# Copy App files
COPY . /app

# Run Grails dependency-report command to pre-download dependencies but not
# create unnecessary build files or artifacts.
RUN grails dependency-report --stacktrace

# Set Default Behavior
ENTRYPOINT ["grails"]

CMD ["run-app"]
Run Code Online (Sandbox Code Playgroud)

建立:

Ubuntu 14.04 LTS 64

Jave:Oracle JDK 1.8.0_77 64

通过sdkman 4.0.32:

Grails 3.14 Groovy 2.4.6 Gradle 2.12

Docker客户端:版本:1.10.3 API版本:1.22 Go版本:go1.5.3 Git commit:20f81dd Built:Thu Mar 10 15:54:52 2016 OS/Arch:linux/amd64

Yur*_*uri 23

当我移动使用配置文件的Grails 3.1.4应用程序web到新机器时,我遇到了同样的问题.

gradle clean我的应用程序的根目录中引发的Grails Maven依赖被下载,并在之后grails的命令开始工作.


Edu*_*omo 5

我用下一个修复它:

  1. 删除(或重命名).gradle目录
  2. 删除(或重命名)gradle目录
  3. 删除(或重命名)build目录

现在,我可以运行的应用程序grails run-app.


Ed *_*d J 0

我找到了答案。我必须从 github 下载 grails 配置文件并将它们安装在 $GRAILS_HOME 中。我在 docker 文件中设置 Grails 环境变量后立即放置了此步骤。

请参阅下面的示例 docker 文件片段:

...
# Setup Grails path.
ENV GRAILS_HOME /usr/lib/jvm/grails    
ENV PATH $GRAILS_HOME/bin:$PATH

# Setup grails profiles
RUN wget https://codeload.github.com/grails/grails-profile-repository/zip/master && \
    unzip master && \
    mv grails-profile-repository-master/profiles/ $GRAILS_HOME && \
    rm -rf master && \
    rm -rf grails-profile-repository-master
...
Run Code Online (Sandbox Code Playgroud)