我正在使用 ubuntu:latest
图像来创建一个meteorJS docker 图像。
问题是, meteor 被下载了两次,我确实收到了一些关于 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
?
最佳答案
您的问题是您正在更改导致权限问题的 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
并且它创建目录然后它不会有正确的权限。接下来,因为您切换了用户,您不再有权创建
/builds/project/data
在根。但你确实拥有/usr/local/
所以你应该把它作为起始路径。您看到的 npm 警告也正常,如果 package.json
将始终发出警告。不在那里,您正在尝试安装本地模块。所以你可以忽略它,只要它说WARN
关于ubuntu - Docker:MeteorJS 安装了两次并出现一些警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491188/