【问题标题】:Dockerfile/npm: create a sudo user to run npm installDockerfile/npm:创建一个 sudo 用户来运行 npm install
【发布时间】:2014-12-29 10:33:33
【问题描述】:

创建一个Dockerfile 来安装我们创建的节点框架(根据我之前的帖子here):

# Install dependencies and nodejs
RUN apt-get update
RUN apt-get install -y python-software-properties python g++ make
RUN add-apt-repository ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get install -y nodejs

# Install git
RUN apt-get install -y git

# Bundle app source
ADD . /src

# Create a nonroot user, and switch to it
RUN /usr/sbin/useradd --create-home --home-dir /usr/local/nonroot --shell /bin/bash nonroot
RUN /usr/sbin/adduser nonroot sudo
RUN chown -R nonroot /usr/local/
RUN chown -R nonroot /usr/lib/
RUN chown -R nonroot /usr/bin/
RUN chown -R nonroot /src

USER nonroot

# Install app source
RUN cd /src; npm install

问题是 npm 不希望以 root 身份运行——有没有办法链接一系列 sudo useradd 命令来创建一个具有 sudo 权限的临时用户,然后我可以切换到 USER 运行npm install?

编辑:更新了上述内容,现在在成功创建用户并进入npm install 行并窒息后出现此问题:

 Error: Attempt to unlock javascript-brunch@1.7.1, which hasn't been locked
     at unlock (/usr/lib/node_modules/npm/lib/cache.js:1304:11)
     at cb (/usr/lib/node_modules/npm/lib/cache.js:646:5)
     at /usr/lib/node_modules/npm/lib/cache.js:655:20
     at /usr/lib/node_modules/npm/lib/cache.js:1282:20
     at afterMkdir (/usr/lib/node_modules/npm/lib/cache.js:1013:14)
     at /usr/lib/node_modules/npm/node_modules/mkdirp/index.js:37:53
     at Object.oncomplete (fs.js:107:15)
 If you need help, you may report this *entire* log,
 including the npm and node versions, at:
     <http://github.com/npm/npm/issues>

【问题讨论】:

  • 有什么理由不使用“npm -g install”来全局安装包?
  • 是的,这是安装package.json的所有内容,不是一个包。
  • 您介意提供例如您正在使用的 package.json 文件,以帮助其他人重现同样的问题?
  • 我得到了同样的错误。您是否以某种方式解决了此尝试解锁问题?
  • 我用 su -l noroot -c 'npm install' 而不是 USER 语句解决了这个问题。

标签: node.js ubuntu docker


【解决方案1】:

“尝试解锁”问题通常是由于没有正确设置环境变量HOME 引起的。 npm 需要将其设置为可以编辑的目录(它在那里设置和管理.npm 目录)。

您可以在 docker run 调用中使用 e 指定环境变量。 G。 docker run -e "HOME=/home/docker".

【讨论】:

    【解决方案2】:

    要解决您的“尝试解锁”问题,请先尝试通过发出清理 npm 缓存

    npm cache clean
    

    之后,运行

    npm install
    

    【讨论】:

      【解决方案3】:

      当我尝试在我的 Dockerfile 中以非 root 用户身份执行时,我遇到了类似的 npm install 错误。 Svante 对这个问题的解释很成功,npm 在 $HOME 目录下做了一些缓存。这是一个与 npm install 配合使用的简单 Dockerfile:

      FROM dockerfile/nodejs
      
      # Assumes you have a package.json in the current dir
      ADD . /src
      
      # Create a nonroot user, and switch to it
      RUN /usr/sbin/useradd --create-home --home-dir /usr/local/nonroot --shell /bin/bash nonroot 
      
      RUN chown -R nonroot /src
      
      # Switch to our nonroot user
      USER nonroot
      
      # Set the HOME var, npm install gets angry if it can't write to the HOME dir, 
      # which will be /root at this point
      ENV HOME /usr/local/nonroot
      
      # Install app source
      WORKDIR /src
      RUN npm install
      

      【讨论】:

        猜你喜欢
        • 2013-12-14
        • 2017-02-14
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 2021-06-29
        • 2016-05-03
        • 2018-05-07
        相关资源
        最近更新 更多