V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CallMeReznov
V2EX  ›  Docker

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

  •  
  •   CallMeReznov · 2019-04-08 17:36:56 +08:00 · 7633 次点击
    这是一个创建于 2055 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我尝试着打包一个 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 的,今天是第一次真正尝试打包公司业务.
    另外各位还有别的更优的方式来打包这个镜像吗?

    6 条回复    2019-04-11 17:47:17 +08:00
    julyclyde
        1
    julyclyde  
       2019-04-10 18:36:47 +08:00
    1 你看看.bashrc 里有啥错
    2 你这样 source 是不会有效果的,多个命令是分别运行的,不是在同一个 shell 里
    CallMeReznov
        2
    CallMeReznov  
    OP
       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
        3
    julyclyde  
       2019-04-11 15:01:20 +08:00
    @CallMeReznov docker 里并没有所谓“默认某种 shell ”的情况。取决于你用的 image 里的内容
    julyclyde
        5
    julyclyde  
       2019-04-11 17:46:24 +08:00
    @CallMeReznov 嗯,那你遇到了不止一个问题
    我强调的方面是,因为 source 命令仅对“当前 shell ”有效,而多个 RUN 其实是“分别调用了多次 shell ”,前边的 source 对后边无任何效果
    julyclyde
        6
    julyclyde  
       2019-04-11 17:47:17 +08:00
    @CallMeReznov 以及,你发一个 stackoverflow 并不能说明 docker 里有所谓默认 shell
    照样是没有的。取决于你用的 image
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2821 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:33 · PVG 15:33 · LAX 23:33 · JFK 02:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.