Docker图像图层和ENTRYPOINT序列

时间:2017-01-09 16:42:00

标签: javascript node.js docker environment-variables

我有以下dockerfile

FROM maven:3.3.3-jdk-8

#install node
RUN apt-get update
RUN apt-get -qq update
RUN apt-get install -y nodejs npm

# TODO could uninstall some build dependencies
RUN update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

# Install packages for envsubst
RUN apt-get update && apt-get upgrade -y --force-yes && rm -rf /var/lib/apt/lists/*;
RUN apt-get update
RUN apt-get install -y gettext-base


# Create app directory 
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# cache package.json and node_modules to speed up builds
ADD src src
ADD package.json package.json
ADD node_modules node_modules
ADD pom.xml pom.xml
ADD Gruntfile.js Gruntfile.js
Add gulpfile.js gulpfile.js
ADD settings.xml settings.xml

# Substitute dependencies from environment variables
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 8000

这是入口点脚本

#!/bin/sh

envsubst < "/usr/src/app/src/js/envapp.js" > "/usr/src/app/src/js/app.js"
mvn clean  install -DskipTests -s settings.xml 
npm start

请注意,行envsubst < "/usr/src/app/src/js/envapp.js" > "/usr/src/app/src/js/app.js"会读取环境并更新app.js文件

我已确认通过sshing到容器并打开文件来更新文件 但是,当我在浏览器中打开应用程序时,它似乎仍在读取app.js文件的旧值。

经过大量调试后,我觉得让npm start命令仍然读取docker文件中的旧图层。有没有办法在`npm开始行中获取新的变化?

我也尝试将npm start作为ENTRYPOINT的参数但仍具有相同的效果。关于可能出错的任何想法?

我也尝试过分割图像,因此我将文件复制到一个图像中,并将其用作执行环境操作的图像的基本图像 但仍然有同样的问题

以下是我运行docker容器的方法

docker run -e "ENVVARIABLE=VALUE" -i <image-name>

0 个答案:

没有答案