我有以下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>