【问题标题】:Building front before creating Docker image在创建 Docker 映像之前构建前端
【发布时间】:2020-05-20 08:41:03
【问题描述】:

我是 Docker 新手,目前我正在对一些应用程序进行 docker 化。

项目结构:

-PlayProject

-------app
----------controllers
----------models
----------views

-------ci
-------conf
-------project

-------public
----------css
----------js
----------img
----------fonts

-------sbt-cache
-------src
-------target

-------front
------------header (npm folder)
------------footer (npm folder)
-------Dockerfile
----*

该项目是在后端使用 PlayFramework(使用 sbt 作为构建工具)和前端使用 Reactjs 开发的。前端由 gtwo 模块(页眉和页脚)构成。

在我的 dockerfile 上,我需要在前面运行构建模块(在文件夹页眉和页脚中运行“npm run build”命令)以更新公用文件夹,然后再进行配置

我的 Dockerfile :

FROM openjdk:8

ENV HEADER front/header
ENV FOOTER front/footer
ENV PROJECT_HOME /usr/src
ENV SBT_VERSION 1.2.1

#install node
RUN  \
        curl -sL https://deb.nodesource.com/setup_4.x | bash  && \
        # and install node
        apt-get update && \
        apt-get install nodejs && \
        # confirm that it was successful
        node -v && \
        # npm installs automatically
        npm -v

WORKDIR $HEADER/

RUN  \
         echo $(ls -1 $HEADER/) && \
        npm cache clean && \
        npm i && \
        npm run build

WORKDIR $FOOTER/

RUN \
        echo $(ls -1 $FOOTER/) && \
        npm cache clean && \
        npm i && \
        npm run build


RUN mkdir -p $PROJECT_HOME/sbt $PROJECT_HOME/app

WORKDIR $PROJECT_HOME/sbt

# Install curl
RUN \
       apt-get update && \
       apt-get -y install curl && \
       apt-get -y install vim

# Install sbt
RUN \
        curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
        dpkg -i sbt-$SBT_VERSION.deb && \
        rm sbt-$SBT_VERSION.deb && \
        apt-get update && \
        apt-get -y install sbt


COPY . $PROJECT_HOME/app
WORKDIR $PROJECT_HOME/app

EXPOSE 9000

问题是我无法本地化前端文件夹并运行我的 npm 命令。你觉得呢?

【问题讨论】:

    标签: java reactjs docker npm dockerfile


    【解决方案1】:

    您没有设置第一个 WORKDIR 指令的绝对路径:

    WORKDIR 指令可以在 Dockerfile 中多次使用。如果提供了相对路径,它将相对于前一个 WORKDIR 指令的路径。例如:

    工作目录 /a

    工作目录 b

    WORKDIR c

    运行密码

    此 Dockerfile 中最终 pwd 命令的输出将是 /a/b/c。

    quoted from here

    也许您想像这样替换您的第一个 WORKDIR:

    WORKDIR $PROJECT_HOME/$HEADER
    COPY . .
    # instead of just WORKDIR $HEADER/
    

    【讨论】:

      【解决方案2】:

      看起来您实际上并没有将本地源发送到 Docker 容器,因此没有要构建的内容。

      在切换 WORKDIR 之前尝试添加类似 COPY . . 的行。

      【讨论】:

        猜你喜欢
        • 2022-10-23
        • 2021-09-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 1970-01-01
        相关资源
        最近更新 更多