ubuntu - Docker:MeteorJS 安装了两次并出现一些警告

标签 ubuntu docker meteor dockerfile

我正在使用 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 被下载了两次:
  • curl ...
  • meteor npm 安装 ...

  • 我也收到这个警告:
    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/

    相关文章:

    apache - 无法在 Apache 中安装 SSL

    meteor - 将 Meteor 用户发布到管理员

    meteor - 在 Meteor 中安装和使用 bower 的正确方法是什么?

    javascript - 在 Meteor.JS Handlebars 中将对象转换为数组后无法拆分字符串

    python - 无法启动 gunicorn.service : Unit gunicorn. 找不到服务。 Ubuntu 18.04

    ubuntu - Julia 0.4 在 Ubuntu 的本地路径中找不到模块

    linux - 如何下载整个站点的 .mp3 文件?

    docker - 在现有的 asp.net core docker 容器上安装 nginx

    git - Jenkins 创建一个工作来构建许多 repo

    docker - 带有重定向命令的Dockerfile “RUN echo”导致文件名困惑