我正在使用ubuntu:latest
图像来创建meteorJS泊坞窗图像。
问题是,流星被下载了两次,我确实收到了一些package.json的警告。
Dockerfile
FROM ubuntu:latest
# build arguments
ARG APP_PACKAGES
ARG APP_LOCALE=en_US
ARG APP_CHARSET=UTF-8
ARG APP_USER=app
ARG APP_USER_DIR=/home/${APP_USER}
# set the locale (required by Meteor)
RUN locale-gen ${APP_LOCALE}
RUN localedef ${APP_LOCALE}.${APP_CHARSET} -i ${APP_LOCALE} -f ${APP_CHARSET}
# create a non-root user that can write to /usr/local (required by Meteor)
RUN useradd -mUd ${APP_USER_DIR} ${APP_USER}
RUN chown -Rh ${APP_USER} /usr/local
USER ${APP_USER}
# MeteorJS
RUN curl https://install.meteor.com/ | sh
# NPM packages
WORKDIR '/builds/project/data'
RUN meteor npm install gridfs-stream gm fluent-ffmpeg
最后一部分(RUN meteor ...
)给了我这个:
This is your first time using Meteor!
Installing a Meteor distribution in your home directory.
Downloading Meteor distribution
所以meteor下载了两次:
我也收到了这个警告:
npm WARN enoent ENOENT: no such file or directory, open '/builds/project/data/package.json'
npm WARN media No description
npm WARN media No repository field.
npm WARN media No README data
npm WARN media No license field.
为什么要有一个package.json,虽然我不使用--save
?
答案 0 :(得分:2)
您的问题是您正在更改导致权限问题的Dockerfile之间的用户。 dockerfile下面对我很有用
FROM ubuntu:latest
RUN apt update && apt install -y curl
# build arguments
ARG APP_PACKAGES
ARG APP_LOCALE=en_US
ARG APP_CHARSET=UTF-8
ARG APP_USER=app
ARG APP_USER_DIR=/home/${APP_USER}
# set the locale (required by Meteor)
#RUN locale-gen ${APP_LOCALE}
#RUN localedef ${APP_LOCALE}.${APP_CHARSET} -i ${APP_LOCALE} -f ${APP_CHARSET}
# create a non-root user that can write to /usr/local (required by Meteor)
RUN useradd -mUd ${APP_USER_DIR} ${APP_USER}
RUN chown -Rh ${APP_USER} /usr/local
USER ${APP_USER}
# MeteorJS
RUN curl https://install.meteor.com/ | sh
# NPM packages
RUN mkdir -p /usr/local/builds/project/data
WORKDIR '/usr/local/builds/project/data'
RUN meteor npm install gridfs-stream gm fluent-ffmpeg
我做的两个主要变化是
RUN mkdir -p /usr/local/builds/project/data
WORKDIR '/usr/local/builds/project/data'
您想要创建自己的目录,而不是让WORKDIR
创建它。您创建的目录将具有属于您的用户的权限。但如果目录不存在,那么您使用WORKDIR
并创建目录,然后它就没有正确的权限。
接下来因为您切换了用户,您无权再在root用户中创建/builds/project/data
。但你拥有/usr/local/
所以你应该将其作为起始路径。您看到的npm警告也没问题,如果package.json
不存在并且您正在尝试安装本地模块,它将始终发出警告。所以只要它说WARN