我尝试着打包一个 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 [email protected] -g --unsafe-perm
CMD ["node", "-v"]
平常一直都是学习和测试的方式"玩"docker 的,今天是第一次真正尝试打包公司业务.
另外各位还有别的更优的方式来打包这个镜像吗?
1
julyclyde 2019-04-10 18:36:47 +08:00
1 你看看.bashrc 里有啥错
2 你这样 source 是不会有效果的,多个命令是分别运行的,不是在同一个 shell 里 |
2
CallMeReznov OP @julyclyde #1 其实今天我找了一下网上其他人打包 NVM 的 dockerfile,也查了外网的一些回答
有因为说默认 docker 用的是 sh 而非 bash 问题导致的. 也有说 bashrc 里是 NVM 的环境变量,需要用 ENV 手动设置 最后还是看了一下 http://ju.outofmemory.cn/entry/130810 这里的方式最后成功执行了 NVM. |
3
julyclyde 2019-04-11 15:01:20 +08:00
@CallMeReznov docker 里并没有所谓“默认某种 shell ”的情况。取决于你用的 image 里的内容
|
4
CallMeReznov OP |
5
julyclyde 2019-04-11 17:46:24 +08:00
@CallMeReznov 嗯,那你遇到了不止一个问题
我强调的方面是,因为 source 命令仅对“当前 shell ”有效,而多个 RUN 其实是“分别调用了多次 shell ”,前边的 source 对后边无任何效果 |
6
julyclyde 2019-04-11 17:47:17 +08:00
@CallMeReznov 以及,你发一个 stackoverflow 并不能说明 docker 里有所谓默认 shell
照样是没有的。取决于你用的 image |