在Docker上运行的Java App中写入文件

时间:2016-08-01 06:43:43

标签: java maven docker

背景

我正在尝试创建一个编译器Web服务,因此用户可以发布用我编写的某种语言编写的代码,然后它将编译,运行并返回打印结果。我的第二次迭代涉及使用Docker镜像将代码POST的运行隔离到我正在运行的Web服务器中。

问题

我正在尝试将发布的代码写入文本文件以在其上运行我的编译器,但是我的编译器在尝试创建文件时失败了。我的文件路径应该是正确的,我的其他测试路由正常。这是我尝试运行的一些演示代码,但是失败了:

try (Writer writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream("/raw/compile-source.slacc"), "utf-8"))) {
            writer.write(req.body());
        }

在我用来启动它的Dockerfile中,我创建了/ raw目录,如果重要的话。我想象Docker不希望Java进程创建任意文件。有什么想法吗?下面是我的Dockerfile。

我的Dockerfile

FROM java:8

# Install maven
RUN apt-get update
RUN apt-get install -y maven

WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

CMD ["java", "-version"]

CMD ["mkdir", "/raw"]
CMD ["mkdir", "/classfiles"];
CMD ["mkdir", "/out"];
EXPOSE 4567
CMD ["mvn", "exec:java"]

1 个答案:

答案 0 :(得分:0)

I had CMD and RUN confused. I only need to have the final

mvn exec:java

in a CMD block, but the others needed to be runs. This is my final output. I also omitted getting scala. :)

FROM java:8

# Install Scala
ENV SCALA_HOME /usr/local/share/scala
ENV PATH $PATH:$SCALA_HOME/bin

ENV SCALA_VERSION 2.11.8

RUN wget --quiet http://downloads.lightbend.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
tar -xf scala-$SCALA_VERSION.tgz && \
rm scala-$SCALA_VERSION.tgz && \
mv scala-$SCALA_VERSION $SCALA_HOME

# Install maven
RUN apt-get update
RUN apt-get install -y maven

WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

RUN ["java", "-version"]

RUN ["mkdir", "/raw"]
RUN ["chmod", "a+w", "/raw"]
RUN ["mkdir", "/classfiles"];
RUN ["mkdir", "/out"];
EXPOSE 4567
CMD ["mvn", "exec:java"]

Thank you everyone for responding and helping me out.