为什么在dockerfile运行指令的/ bin / bash -c“…”部分中,echo $ VARIABLE,在docker build上返回空?

题 :

观察--- echo home--- env之间的输出(见下面), $GOPATH被明确定义为$HOME 。 另外, echo $HOME的输出在--- start--- echo home之间是可见的。 但是,在--- env--- echo gopath之间echo $GOPATH的输出是空的。 为什么?

细节 :

Dockerfile RUN指令有问题

 RUN /bin/bash -c "echo '-------------------------------------------- start' ;\ echo $HOME ;\ echo '-------------------------------------------- echo home' ;\ source $HOME/.gvm/scripts/gvm ;\ gvm use go1.5.1 ;\ env ;\ echo '-------------------------------------------- env ' ;\ echo $GOPATH ;\ echo '-------------------------------------------- echo gopath' ;\ " 

Docker构build步骤超出上述说明

 Step 5 : RUN /bin/bash -c "echo '-------------------------------------------- start' ; echo $HOME ; echo '-------------------------------------------- echo home' ; source $HOME/.gvm/scripts/gvm ; gvm use go1.5.1 ; env ; echo '-------------------------------------------- env ' ; echo $GOPATH ; echo '-------------------------------------------- echo gopath' ; " ---> Running in c079d62aa7eb -------------------------------------------- start /home/amebel -------------------------------------------- echo home Now using version go1.5.1 HOSTNAME=e611e15f9c9d GVM_ROOT=/home/amebel/.gvm LD_LIBRARY_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib: PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/bin:/home/amebel/.gvm/gos/go1.5.1/bin:/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/bin:/home/amebel/.gvm/bin:/home/amebel/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin GVM_VERSION=1.0.22 PWD=/home/amebel gvm_pkgset_name=global SHLVL=1 HOME=/home/amebel GOROOT=/home/amebel/.gvm/gos/go1.5.1 DYLD_LIBRARY_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib: gvm_go_name=go1.5.1 GVM_OVERLAY_PREFIX=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay PKG_CONFIG_PATH=/home/amebel/.gvm/pkgsets/go1.5.1/global/overlay/lib/pkgconfig: GOPATH=/home/amebel/.gvm/pkgsets/go1.5.1/global GVM_PATH_BACKUP=/home/amebel/.gvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env -------------------------------------------- env -------------------------------------------- echo gopath ---> db5582b888ab Removing intermediate container c079d62aa7eb Successfully built db5582b888ab ---- Finished build of amebel/golang ---- 

提前致谢

由于你的string是用双引号括起来的,因此它的variables将由运行命令的原始shell来扩展,而不是由bash -c调用的shell来扩展。 GOPATH没有在原来的shell中定义。

将参数放在bash -c中,而不是双引号,而是直接传递给bash

 RUN /bin/bash -c 'echo "-------------------------------------------- start" ;\ echo $HOME ;\ echo "-------------------------------------------- echo home" ;\ source $HOME/.gvm/scripts/gvm ;\ gvm use go1.5.1 ;\ env ;\ echo "-------------------------------------------- env " ;\ echo $GOPATH ;\ echo "-------------------------------------------- echo gopath" ;\ '