Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Dockerfile/ npm :创建运行npm安装的sudo用户

Dockerfile/ npm :创建运行npm安装的sudo用户
EN

Stack Overflow用户
提问于 2014-02-20 03:29:13
回答 3查看 8K关注 0票数 4

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

代码语言:javascript
运行
AI代码解释
复制
# 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预期不会以根用户的身份运行--是否有方法链接一系列sudo useradd命令来创建具有sudo权限的临时用户,然后切换到USER运行npm install

编辑:更新了上面的内容,在成功创建用户并进入npm install行并阻塞之后,得到了这个问题:

代码语言:javascript
运行
AI代码解释
复制
 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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-26 11:46:48

要解决您的“尝试解锁”问题,请首先尝试清除npm缓存,方法是

代码语言:javascript
运行
AI代码解释
复制
npm cache clean

在那之后,跑

代码语言:javascript
运行
AI代码解释
复制
npm install
票数 3
EN

Stack Overflow用户

发布于 2014-08-09 15:22:18

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

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

票数 8
EN

Stack Overflow用户

发布于 2014-12-28 18:33:33

当我试图在我的Dockerfile中以非根用户的身份执行is时,我遇到了一个类似的npm安装错误。Svante对这个问题的解释是,npm在$HOME dir下做了一些缓存。下面是一个使用npm安装的简单Dockerfile:

代码语言:javascript
运行
AI代码解释
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21906419

复制
相关文章
【Android Gradle 插件】自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 Maven 仓库中的自定义 Gradle 插件 )
参考 Android Gradle 插件内容 , 将 Android Studio 的 Project 面板中的 External Libraries 展开 ,
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】自定义 Gradle 插件模块 ④ ( META-INF 中声明自定义插件的核心类 | 在应用中依赖本地 Maven 仓库中的自定义 Gradle 插件 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )
在 Android Studio 工程的根目录的 buildSrc 模块下的 src/main/groovy 代码 , 自动引入了 Groovy , Gradle , Java 依赖库 , 可以直接调用上述 API ;
韩曙亮
2023/03/30
1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )
【Android Gradle 插件】Gradle 构建机制 ⑤ ( 在 Android Studio 中查看 Android Gradle 插件源码 )
选择 " 菜单栏 / File / New / New Project… " 选项 ,
韩曙亮
2023/03/30
1.8K0
【Android Gradle 插件】Gradle 构建机制 ⑤ ( 在 Android Studio 中查看 Android Gradle 插件源码 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑤ ( 自定义插件中获定义方法 | 在插件中创建 Gradle 任务 | 代码示例 )
在 自定义 Gradle 插件 的 Extension 扩展 中 , 可以定义方法 , 定义的方法可以带参数 , 也可以不带参数 ;
韩曙亮
2023/03/30
1.8K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑤ ( 自定义插件中获定义方法 | 在插件中创建 Gradle 任务 | 代码示例 )
android gradle command not found在Mac中
这个问题是在命令行中使用gradle命令不存在 只需要找到本地的gradle然后加到.zshrc文件中
tea9
2022/07/16
1.1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ② ( buildSrc 目录中实现 Gradle 插件 | 实现 Gradle 插件代码 | 模块引入插件并编译 )
在 buildSrc 模块 中的 src/main/groovy 目录 下 , 创建 MyPlugin.groovy 代码文件 作为插件的主要代码 , 代码如下 :
韩曙亮
2023/03/30
5380
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ② ( buildSrc 目录中实现 Gradle 插件 | 实现 Gradle 插件代码 | 模块引入插件并编译 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 ) 中 , 实现了 自定义插件 的 扩展 Extension , 在 Module 模块下的 build.gradle 构建脚本中 , android 配置块 就是一个 AppExtension 扩展 , 但是在 android 扩展下又定义了 defaultConfig 扩展 , 这是一个 ProductFlavor 配置 ;
韩曙亮
2023/03/30
2.1K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )
Android apk中so库文件未压缩
升级AS 3.6.1, 并且升级project build.gradle AGP 到3.6.1, 一个项目发现打包后文件骤然增大, 查看apk包,发现apk 包中so库文件未被压缩. 但是一个类似项目,相同版本却没有问题
全栈程序员站长
2022/07/02
1.3K0
Android apk中so库文件未压缩
【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )
在上一篇博客 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ① ( 组件化简介 | 创建组件化应用 | 依赖库模块 / 应用模块 切换设置 ) 最后提到了 在 Gradle 构建脚本中 , 需要实现 依赖库模块 / 应用模块 切换设置 , 主要涉及如下两个方面 :
韩曙亮
2023/03/30
2.2K0
【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ① ( buildSrc 目录中实现 Gradle 插件 | 创建 src/main/groovy 源码目录并编译 )
创建 Gradle 插件 , 一般是在 Android Studio 或者 IntelliJ IDEA 中 , 创建一个插件模块 , 这里以 AS 中为例 ;
韩曙亮
2023/03/30
1.6K0
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ① ( buildSrc 目录中实现 Gradle 插件 | 创建 src/main/groovy 源码目录并编译 )
【Android Gradle 插件】自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )
在上一篇博客 【Android Gradle 插件】Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 ) 中 , 总结了在 Android Studio 工程中 自定义 Gradle 插件 , 并在 build.gradle 构建脚本 中导入插件的代码 ;
韩曙亮
2023/03/30
2.2K0
【Android Gradle 插件】自定义 Gradle 插件模块 ① ( 在 Module 模块中自定义 Gradle 插件 | 创建自定义插件类型模块 | 手动导入相关依赖 )
Android – 在Gradle中更改APK文件名
默认情况下,Android Studio中的Gradle构建命名为.apk文件app-release.apk。对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为<app name>-release-<version>.apk。 需要在app的目录下面修改build.gradle文件。 第一步是将project.archivesBaseName设置为您的应用程序名称。 android { compileSdkVersion 25 buildToolsVersio
code_horse
2018/07/02
3K0
【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 )
在插件模块中的 src/main 目录 下创建 groovy 目录 , 用于存放 Groovy 代码 , 在其中定义包名以及包名下的源码 :
韩曙亮
2023/03/30
1.8K0
【Android Gradle 插件】自定义 Gradle 插件模块 ② ( 在模块中定义插件 | 引入自定义 Gradle 插件模块 | 配置 Gradle 插件上传选项 | 配置分组名称版本号 )
【Android Gradle 插件】自定义 Gradle 任务 ⑩ ( 自定义任务类继承 DefaultTask 类 | TaskContainer#create 函数创建任务 | 生成自定义任务)
Gradle 任务就是一个 Task 类 , 在 Gradle 脚本中 , 可以 自定义 Task 类 ,
韩曙亮
2023/03/30
8880
【Android Gradle 插件】自定义 Gradle 任务 ⑩ ( 自定义任务类继承 DefaultTask 类 | TaskContainer#create 函数创建任务 | 生成自定义任务)
【Android Gradle 插件】Gradle 自定义 Plugin 插件 ③ ( 自定义插件作用 | Android Gradle 插件的扩展 | 自定义 Extension 扩展 )
在 Gradle 自定义插件 Plugin 中 , 如果要执行复杂的工作 , 可以在 实现的 Plugin 接口的 apply 函数中执行 ;
韩曙亮
2023/03/30
1K0
Android中Gradle使用
Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。
海哥@开发
2022/04/06
8690
Android中Gradle使用
Android Studio 自定义Gradle插件
之前写了一个Android中的AOP框架Cooker.这里总结一下里面用到的两块小知识:
乱码三千
2021/07/29
8770
Android Studio 自定义Gradle插件
Gradle For Android(9)--自定义构建
现在我们知道了Gradle如何工作,如何创建自己的Task以及Plugin,如何执行test任务,如何设置CI。这一章会包含一些小技巧,接下来会从以下Topic进行讨论:
None_Ling
2018/10/24
7250
Gradle For Android(9)--自定义构建
【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
Android Plugin DSL Reference 参考文档 : https://google.github.io/android-gradle-dsl/2.3/
韩曙亮
2023/03/30
6260
【Android Gradle 插件】Gradle 映射文件 ( settings.gradle 映射为 Settings 类 | build.gradle 映射为 Project 类 )
点击加载更多

相似问题

Android Gradle 3.0和本地库的“未解析引用R”

11

android项目中未解析android项目库中的类

21

Android Studio Gradle依赖项未解析

13

Android Gradle --在gradle中实现Apache时未能解决错误

325

Gradle未能解析Android中的库

127
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档