我想使用Bitnami 的 Nginx base image提供静态网站。我有一个多阶段 Dockerfile 如下:
# build stage
FROM node:lts-alpine as build-stage
COPY ./ /app
WORKDIR /app
COPY .npmrc .npmrc
RUN npm install && npm run build
# Production stage
FROM bitnami/nginx:1.16 as production-stage
COPY --from=build-stage --chown=1001 /app/dist /app
COPY nginx.conf /opt/bitnami/nginx/conf/nginx.conf
COPY --chown=1001 entrypoint.sh /
RUN chmod +w /entrypoint.sh
CMD ["/entrypoint.sh"]
我用它entrypoint.sh来用环境变量替换一些文件内容,例如:
#!/bin/bash
function join_by { local IFS="$1"; shift; echo "$*"; }
vars=$(env | grep VUE_APP_ | awk -F = '{print "$"$1}')
vars=$(join_by ' ' $vars)
for file in /app/js/app.*;
do
### T H I S L I N E T H R O W S E R R O R ###
cp $file $file.tmpl
envsubst "$vars" < $file.tmpl > $file
rm $file.tmpl
done
exec "$@"
在cp命令它抛出一个错误:
cp:无法创建常规文件'/app/js/app.042ea3b0.js.tmpl':权限被拒绝
如您所见,我已经复制了 dist 文件和entrypoint.shwith --chown=1001(Bitnami 图像中的默认用户),但没有任何好处。
是因为默认情况下图像文件夹app是由卷公开的吗?如何复制和修改已移动到图像中的文件?
PS:它在 OpenShift 环境中运行。