打包 docker 镜像时,在执行 source ~/.bashrc 就会报错退出,错误代码 returned a non-zero code: 1

2019-04-08 17:36:56 +08:00
 CallMeReznov

我尝试着打包一个 pomelo 的业务,因为程序内涉及到其他命令(如 sysstat 命令)就没有直接选择 pomelo 的镜像.
我计划是使用 centos 作为基础镜像,使用 dockerfile 运行 yum 安装需要的相关软件后接连再安装 nvm,node,pomelo.
但就按照正常程序执行以下命令后却报错

docker build -t pomelo_t1 .

错误信息:

The command '/bin/sh -c source ~/.bashrc' returned a non-zero code: 1

搜索了各方也没有一个完整的回答,于是就来 V2 求助了

以下是 dockerfile

FROM centos:7
MAINTAINER Reznov
WORKDIR /root
RUN yum install -y wget sysstat make gcc gcc+ gcc-c++ \
	&& wget https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh \
	&& chmod +x ./install.sh \
	&& ./install.sh 
RUN source ~/.bashrc 
RUN nvm install v4.6.2 \
	&& npm install pomelo@1.2.3 -g --unsafe-perm
CMD ["node", "-v"]

平常一直都是学习和测试的方式"玩"docker 的,今天是第一次真正尝试打包公司业务.
另外各位还有别的更优的方式来打包这个镜像吗?

7639 次点击
所在节点    Docker
6 条回复
julyclyde
2019-04-10 18:36:47 +08:00
1 你看看.bashrc 里有啥错
2 你这样 source 是不会有效果的,多个命令是分别运行的,不是在同一个 shell 里
CallMeReznov
2019-04-10 19:23:00 +08:00
@julyclyde #1 其实今天我找了一下网上其他人打包 NVM 的 dockerfile,也查了外网的一些回答
有因为说默认 docker 用的是 sh 而非 bash 问题导致的.
也有说 bashrc 里是 NVM 的环境变量,需要用 ENV 手动设置
最后还是看了一下 http://ju.outofmemory.cn/entry/130810
这里的方式最后成功执行了 NVM.
julyclyde
2019-04-11 15:01:20 +08:00
@CallMeReznov docker 里并没有所谓“默认某种 shell ”的情况。取决于你用的 image 里的内容
CallMeReznov
2019-04-11 16:02:05 +08:00
julyclyde
2019-04-11 17:46:24 +08:00
@CallMeReznov 嗯,那你遇到了不止一个问题
我强调的方面是,因为 source 命令仅对“当前 shell ”有效,而多个 RUN 其实是“分别调用了多次 shell ”,前边的 source 对后边无任何效果
julyclyde
2019-04-11 17:47:17 +08:00
@CallMeReznov 以及,你发一个 stackoverflow 并不能说明 docker 里有所谓默认 shell
照样是没有的。取决于你用的 image

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/553047

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX